Menu
CoddyTech

Akıcı Şerit Değiştirme

Coddy'nin Unity Oyunu: Gökyüzü Şeritleri kursunda ders 2 / 20.

Koşucu tek bir karede bir şeritten diğerine atlıyor. İşe yarıyor, ama ışınlanıyormuş gibi görünüyor. Gözün hareketi takip edebilmesi için şerit değişimi biraz zaman almalı.

Mathf.MoveTowards(current, target, maxStep), bir sayıyı hedefe doğru en fazla maxStep kadar ilerletir ve hedefi asla geçmez. Her karede hız ile Time.deltaTime çarpımından oluşan bir adımla çağrıldığında, kare hızı ne olursa olsun saniyede o hız kadar birim ilerler:

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

laneSpeed değeri 16 olduğunda, 2.5 birimlik şerit değişimi yaklaşık 0.16 saniye sürer: hızlıdır, ama hareketi görebilirsin.

challenge icon

Görev

Kolay
  1. public float laneSpeed = 16f; satırını laneWidth satırının altına ekle.
  2. float x = targetX; satırını yukarıdaki Mathf.MoveTowards satırıyla değiştir.
  3. “Oyna”ya bas ve şerit değiştir.

Kendin dene

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 Oyunu: Gökyüzü Şeritleri bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground