Menu
CoddyTech

מעבר חלק בין מסלולים

שיעור 2 מתוך 20 בקורס משחק Unity: נתיבי שמיים של Coddy.

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

Mathf.MoveTowards(current, target, maxStep) מזיזה מספר לכיוון יעד לכל היותר ב-maxStep, ולעולם לא מעבר לו. כשקוראים לה בכל פריים עם צעד השווה למהירות כפול Time.deltaTime, היא מזיזה את המספר במהירות הזאת ביחידות לשנייה, ללא תלות בקצב הפריימים:

float x = Mathf.MoveTowards(transform.position.x, targetX, laneSpeed * Time.deltaTime);

כאשר laneSpeed הוא 16, שינוי נתיב של 2.5 יחידות נמשך כ-0.16 שניות: מהיר, אבל רואים את התנועה.

challenge icon

אתגר

קל
  1. הוסף public float laneSpeed = 16f; מתחת ל־laneWidth.
  2. החלף את float x = targetX; בשורה של Mathf.MoveTowards שמופיעה למעלה.
  3. לחץ על "שחק" ועבור בין הנתיבים.

נסו בעצמכם

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;

    public int lane;

    private CharacterController controller;

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

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) lane = Mathf.Max(-1, lane - 1);
        if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) lane = Mathf.Min(1, lane + 1);

        float targetX = lane * laneWidth;
        float x = targetX;
        Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
        controller.Move(move);
    }
}

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

תרגלו בעצמכם: Unity אונליין