Menu
CoddyTech

המסלול

חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 48 מתוך 56.

בפרק הזה נבנה משחק פלטפורמה בתלת־ממד. רצים וקופצים בין פלטפורמות מרחפות, רוכבים על אחת שגולשת, נוגעים בנקודות ביקורת כדי שנפילה לא תחזיר אתכם להתחלה, אוספים אבני חן שמספרן מוצג על המסך, חוצים את קו הסיום אל השלב הבא ומנסים לשבור את שיא הזמן שלכם. המשחק מורכב מחמישה סקריפטים שנמצאים בפרויקט כבר מההתחלה: Player, MovingPlatform, Checkpoint, Gem ו־FinishLine. ארבעת האחרונים ריקים כרגע, וכל שיעור ממלא אחד מהם. השחקן הוא CharacterController המנווט באמצעות פעולות של מערכת הקלט, והמצלמה היא ילד שלו, כך שהיא עוקבת אחריו ללא סקריפט.

CharacterController נע בשתי דרכים. Move(motion) מזיז אותו למרחק נתון ואינו מוסיף דבר, לכן כוח הכבידה, הקפיצות ו־Time.deltaTime הם באחריות הסקריפט, כמו בפרק Character Controller. SimpleMove(speed) מקבל מהירות ביחידות לשנייה, מכפיל אותה בעצמו בזמן של הפריים ומוסיף כוח כבידה; הוא מתעלם מערך ה־y שמועבר אליו, כך שדמות שמזיזים באמצעותו נופלת ממדפים, אך לעולם אינה יכולה לקפוץ. כלב הרועים הזה במשחק רעיית צאן ממבט־על אינו זקוק לקפיצה, לכן SimpleMove ופעולת Move הם כל הסקריפט שלו:

using UnityEngine;
using UnityEngine.InputSystem;

public class Sheepdog : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    private CharacterController controller;
    private InputAction moveAction;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        moveAction = InputSystem.actions.FindAction("Move");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
    }
}

השחקן במשחק הפלטפורמה צריך לקפוץ, לכן הוא שומר את המהירות האנכית שלו בעצמו ונע באמצעות Move, תוך קריאת פעולות Move ו־Jump במקום המחלקה Input. Unity ממליצה לקרוא ל־Move או ל־SimpleMove פעם אחת בכל פריים: ההליכה והנפילה נכללות באותה קריאה, ואז isGrounded מתאר את כל התנועה הזאת.

challenge icon

אתגר

בינוני

התחל את משחק הפלטפורמות עם השחקן. לסקריפט Player יש speed (5), jumpHeight (1.5) ו-gravity (-9.81), את controller ו-velocity לנפילה. מצא את פעולות Move ו-Jump פעם אחת, בתוך Start, ובתוך Update:

  • Move מזיז את השחקן בהליכה במהירות של speed יחידות לשנייה: ימינה ושמאלה לאורך x, קדימה ואחורה לאורך z.
  • כוח הכבידה מוסיף gravity * Time.deltaTime ל-velocity.y בכל פריים. כשהבקר מקורקע ו-velocity.y קטן מ-0, הגדר תחילה את velocity.y ל--2, כך שהוא יישאר צמוד לקרקע.
  • כל לחיצה על Jump, כשהשחקן מקורקע, מגדירה את velocity.y ל-Mathf.Sqrt(jumpHeight * -2f * gravity): קפיצה לגובה של jumpHeight יחידות. החזקת Jump גורמת לקפיצה אחת, ואי אפשר לקפוץ באוויר.
  • קרא ל-controller.Move פעם אחת, עם ההליכה ו-velocity יחד, כפול Time.deltaTime.

לחץ על Play וקפוץ אל הפלטפורמות הראשונות, ואז לחץ על Check.

נסו בעצמכם

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    [SerializeField] private float speed = 5f;
    [SerializeField] private float jumpHeight = 1.5f;
    [SerializeField] private float gravity = -9.81f;

    private CharacterController controller;
    private Vector3 velocity;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        // זוזו בעזרת הפעולה Move, קפצו בעזרת הפעולה Jump, ונפלו בהשפעת כוח הכבידה
    }
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה בונים משחקים אמיתיים