בניית משחקים עם Unity

יוניטי זהו מנוע גרפי אשר משמש לפיתוח משחקי וידאו, סמארטפונים וקונסולות שונות מיזה שנת 2005.
בגרסא כיום, נוכל להוסיף אלמנטים ליוניטי, לגרום להם לזוז עם החצים, ללחוץ עליהם, להעניק להם "חיים" ולהפוך אובייקטים לגיבורים. בנוסף, ניתן להוסיף אפשרויות פיזיקה, תזוזה של הרקע ועוד...

במדריך זה, תוכלו לגעת בקצה המזלג ביוניטי. מדובר במדריך בסיסי ביותר אשר מתווספים אליו סרטונים שונים שצולמו בשנת 2016...
בתום הצפייה במדריך תוכלו להשתמש בתוכנה, להוסיף אלמנטים, לגרום להם לזוז ולנוע...ועוד...
אז למה אתם מחכים? הורידו את היוניטי מכאן בלחיצה למחשב שלכם. ההתקנה תקח זמן מה. לחצו על ההתקנה, לכו לשחק קצת בקונסולה שלכם וכשתחזרו כבר היוניטי יהיה מותקן במחשבכם! בהצלחה!





בתוכנה עצמה - נראה כי יש לנו סצנה ראשונה והתחלתית.
את הסצנה הזו נוכל להפוך למסך הפתיחה שלנו עם כפתורים, מוזיקה ורקע מגניב ממש עוד מעט...
לבינתיים,נוכל לגרור אליה אלמנטים שונים. בין אם מוכנים ובין אם אלמנטים של יוניטי.

כעת, נדבר על שניהם:

  • בהנחה שמדובר בתמונות שמוכנות מראש. כמו למשל, תמונה של כדור או רקע גדול. פשוט נצטרך לגרור אותם פנימה אל תוך היוניטי.

  • ניתן גם לבצע שימוש באלמנטים מוכנים מראש שתוכלו לבצע באמצעות כפתור COMPONENT בתפריט הראשי.




  • שימו לב - נגרור את כל האלמנטים מהתקייה שלכם במחשב, ישירות לאזור התחתון של הפרוייקט. הביטו בתמונה.


    נוכל לגרור אלמנט מסוים מתוך אובייקטי הסצנה בחלק התחתון אל תוך המסך שלנו. נבחין כי יש שם מצלמה. מדובר במצלמת המשחק ובריבוע אשר המשתמש רואה. כאשר נלחץ על אלמנט מסוים שגררנו פנימה, נוכל להזיז אותו/להגדיל/להקטין אותו בלחיצה על הסימן הבא בסרגל שמופיע בצד שמאל למעלה.





    בפרק זה נדבר על שני אלמנטים חשובים מנשוא בכל הנוגע לעולם האובייקטים שלנו.
    עלינו לעבוד בצורה מאוד מסודרת ולחשוב לאט לאט, שלב אחרי שלב. אסור לנו לפספס אף חלק, כי אם לא נרד לסוף דעת המשחק, כנראה שמשהו לא יעבוד ואולי אפילו יהיו באגים. צפו בסרטון הבא וקבלו אינדיקציה בנושא של הבנת אלגוריתם בעולמינו אנו: https://www.youtube.com/watch?v=cDA3_5982h8&t=101s.

    נדמה את עולם הפיזיקה החשוב מנשוא, באמצעות כדור משחק אשר עלינו לכדרר אותו...

    RigidBody

  • ראשית, נרצה שהכדור ייפול מלמעלה כלפי מטה. כלומר, שיתחיל מלמעלה תמיד ויבצע נחיתה רכה כלפי מטה. לכן, עלינו לייצר פיזיקה. בלחיצה על האלמנט, נבחין כי בצד ימין יש לנו חלון בשם inspector ובתוכו אפשרות להזין component חדש... ליחצו והוסיפו rigitbody חדש. התכונה הזו תאפשר לאלמנט שלכם ליפול כלפי מטה... נסו בעצמיכם! כעת הכדור יפול!
    בנוסף, נרצה לבצע מצב בו יש קיר תחתון והכדור מגיע עד אליו ונעצר בו. נוסיף גם לקיר rigitbody והפעם בתכונותיו נחליף את הgravity scale במקום 1 ל0, כך שהוא לא ייפול ויישאר במקומו. בנוסף, נשנה לקיר שלנו את הbody type לstatic.

  • Collider

  • אנו רוצים כעת ליצור התנגשויות בין הכדור שלנו לבין אובייקט אחר (במקרה זה: הקיר). לכן, נצטרך להוסיף גם לכדור וגם לקיר collider רלוונטי אליו דרך הcomponent. למעשה, לכדור נוסיף circle collider ולקיר נוסיף box collider. למעשה, כל אובייקט שיש לו את הcollider שלו, יוכל להתנגש באובייקט אחר וכך כעת - כאשר הכדור ייפול (באמצעות הגרביטציה של הrigitbody) הוא ייפול ויתנגש בקיר ויעצר שם (בזכות הcollider).




  • ביוניטי נכתוב בשפת הc#.
    שפת תכנות זו הומצאה על ידי מייקרוסופט ואנו משתמשים באפשרויות שונות שהיא מציעה.
    על מנת להיסגר על השפה מומלץ לצפות בסרטון המצורף וכן גם ראו ערך "לוגיקה" כאן בעולם ההייטק.
    הרשאות כמו private וכן גם public בעלי ערך כאן מאוד. משתנים ניתן להגדיר פה לפי סוג המחלקה שלהם.
    בנוסף, יש מחלקה אחת עיקרית וחשובה מאוד ביוניטי וזוהי update(). כל מה שאנו רוצים שיקרה בכל מסך שלנו, נכתוב בתוך הפונקציה הזו.

    ביוניטי נוכל להוסיף סקריפט חדש באמצעות לחיצה על component בתפריט העליון. לאחר מכן, הוא יתווסף לחלונית inspector התחתונה מטה. עלינו יהיה לכתוב בתוכו את כל האפשרויות של התזוזה, הטקסט שנרצה לשנות, הלחיצות וכדומה - ולאחר מכן בסיום העבודה, נגרור אותו ימינה לתוך האיזור של תכונות האובייקט שלנו.


    במידה ומונחים כמו משתנים, הרשאות, פונקציות ועוד לא מובנים לכם עדיין - נא לעבור על מדריך הלוגיקה בשקידה.





    ברגע שחיברנו את הסקריפט שלנו לאובייקט מסוים, נוכל כעת להגדיר בתוך הסקריפט שבלחיצה על מקש מסוים או בלחיצה על האובייקט עצמו שיבצע פעולה כלשהי...
    כיצד עושים זאת בשני שלבים ברורים. ראשית, נתחיל מלחיצות עכבר/טאצ' בסמארטפון ובשיעור הבא במדריך נעבור גם ללחיצה על חצי המקלדת וכפתורי המקלדת במחשב PC.

  • ראשית, כדי לזהות לחיצות של עכבר, צריך להוסיף קוליידרים לאוביקטים. הביטו בנושא שיעור מספר 3 "פיזיקה של דברים נופלים".
  • לאחר מכן, נשתמש ב-()OnMouseUp. זוהי מתודה אשר מתעסקת בלחיצת עכבר על האובייקט שלנו...
    public void OnMouseUp()
    {

    }


  • זהו! כעת, בתוך המתודה של ()OnMouseUp נוכל להזין את הפקודות שנרצה לבצע. למשל, לגרום לאובייקט שלנו להיעלם. אזי נכתוב:
    transform.Translate(0, 0, 0);

    או למשל נרצה שבלחיצה האובייקט יקפוץ כלפי מעלה, אזי נשתמש בשורות הבאות:
    GetComponent<Rigidbody>().AddForce(0.3 * 0.3 * Time.deltaTime);

    צרו פרוייקט חדש 3D ביוניטי ובתוכו הוסיפו כדור אחד ואובייקט אחד.
    לאחר מכן, העניקו להם את הקוליידרים והריג'ידבאדי הרלוונטי...
    לסיום, הצמידו לכדור שלנו גם סקריפט ובתוך מתודת הupdate שלו כיתבו את הקוד הבא:

    void Update () {
      float xInput = Input.GetAxis("Horizontal");
      float yInput = Input.GetAxis("Vertical");
      transform.Translate(xInput * Time.deltaTime, yInput * Time.deltaTime, 0);
    }
    אנחנו רוצים להעלים את האובייקטים כאשר הכדור נוגע בהם, כלומר אנחנו צריכים להבין מתי יש לנו התנגשות ביניהם...
    לכן - נשתמש במתודה מיוחדת. כמו שיוניטי קוראת לפונקציה ()Update בסקריפט שלנו כאשר יש עדכון של המסך, כך גם היא קוראתל-()OnCollisionEnter2D כאשר יש התנגשות!

    private void OnCollisionEnter2D(Collision2D collision) {
      Destroy(collision.gameObject);
    }
    שימו לב כי ה-gameObject.collision , מכיל את האוביקט שבו התנגשנו...
    לסיום, בגרסת Unity המתקדמת ביותר, עלינו להפעיל את האפשרות להתנגשות אובייקט מסוג קינמטי להתנגשות באובייקט סטטי. נוכל לטפל בכך בrigitbody של הכדור ושל כל אחד מהאובייקטים.

    על מנת לבצע תזוזה של הכדור שלנו (ממיני פרוייקט) שלא על ידי העכבר, נוכל לבצע באמצעות החצים.
    כל שעלינו לעשות הוא בתוך הupdate לוודא על איזה מקש לחצנו. הביטו בקוד הבא...

    public KeyCode upKey;
    public KeyCode downKey;

    if (Input.GetKey(upKey)) {
      transform.Translate(0, 3 * Time.deltaTime, 0);
    }

    שימו לב - כעת, בחלון הימני בתכונות האובייקט שלנו, נוכל לראות כי תחת האובייקט יש מקום להוסיף את הלחצנים הרלוונטים. הכוונה היא שUpKey יוכל להיות כל מקש שתבחרו לנכון. אבל עליכם להגדיר מבין הרשימה שנפתחת, באיזה מקש מדובר.

    נוכל להוסיף טקסט לדף שלנו!
    הטקסט יוכל להציג כמה פעמים לחצנו או כמה אלמנטים אכלנו (במיני פרוייקט)...

    ראשית, עלינו לייצר component חדש שהוא מסוג של canvas.
    לאחר מכן, נצטרך בתוך הסקריפט לכתוב משתנה חדש מסוג public Text countText;.
    בתוך המתודה של הלחיצה או התזוזה, נשלב גם שורה נוספת אשר תציג את המשתנה שמוֹנה את כמות הפעמים למשל, לבחירתכם. countText.text = "Count: " + count;

    אחד הסקריפטים היותר חשובים במשחק שלנו הוא תזוזת המצלמה.
    בעולם הגיימינג, אף פעם לא נחשוף את המשתמש שלנו לכל מסך המשחק בבת אחת...
    נגרום למצלמת המשחק לנוע ולזוז בהתאם למיקום של הPlayer שלנו!


    לכן, נצטרך לבצע מספר שלבים...
    1. להגדיר לsize במצלמה שלנו 3 לערך.


    2. לכוון את המצלמה בסצנה שלנו למרכז הדמות שאחריה היא תעקוב...


    3. לצרף את הסקריפט הבא למצלמה.

    using UnityEngine;
    using System.Collections;

    public class CompleteCameraController : MonoBehaviour {

        public GameObject player;

        private Vector3 offset;

        void Start ()
        {
            offset = transform.position - player.transform.position;
        }

        void LateUpdate ()
        {
            transform.position = player.transform.position + offset;
        }
    }


    4. שימו לב, הסקריפט שהוספנו למצלמה, מכיל בתוכו משתנה של Player. עליכם לגרור את השחקן מחלונית ההירכייה (הכי שמאלית) אל תוך הריבוע הקטן הריק...


    זהו חברים! כעת יש מעקב של המצלמה אחרי הדמות שלכם!
    לשאלות, השאירו כאן מטה את ונענה לכם בהקדם.

    בהצלחה!!!

    אחד מהקודים הבסיסיים הוא סיום של המשחק...
    עלינו לוודא בupdate בכל רגע, האם נגמרו החיים לשחקן/האם השחקן נפסל/האם השחקן נפל לתהום ונגמר המשחק?

    נעשה זאת בקוד יחסית פשוט...

    void Update ()
    {
        if (???){
            Application.LoadLevel(Application.loadedLevel);
        }
    }
    במקום סימני השאלה בקוד נוכל לשלב בדיקות שנרצה לעשות כאמור.
    למשל: transform.position.y <= -5
    או אולי lifes == 0

    בקרוב.

    מערכת תגובות

    רעות : מעולה! תודה ממש!!!
    תמיר : עכשיו מובן מה rigidbody עושה...
    שי : עוד שיעורים בבקשה

    שם:
    ההודעה:
    🔝