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.
Görev
Kolaypublic float laneSpeed = 16f;satırınılaneWidthsatırının altına ekle.float x = targetX;satırını yukarıdakiMathf.MoveTowardssatırıyla değiştir.- “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