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: مسارات السماء

تدرّب بنفسك: Playground لـ Unity