Menu
CoddyTech

Üç Şerit

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

Bu kursta baştan sona bir oyun geliştiriyorsun; her derste bir özellik ekliyorsun. Bir koşucu gökyüzünde yüksekteki bir yolda ilerliyor. Önüne bariyerler, parmaklıklar ve duvarlar çıkıyor, şeritler boyunca madeni paralar sıralanıyor ve ne kadar uzun dayanırsan yol o kadar hızlanıyor.

Projede zaten dört betik var: oyuncudaki Runner, Road, GameManager ve Coin. Şimdilik çoğu boş ve ders ilerledikçe doldurulacak. Kameradaki beşinci betik CameraFit hazır olarak veriliyor: uzun bir telefon ekranında görünümü genişleterek üç şeridin de sığmasını sağlıyor ve bu betikte değişiklik yapman gerekmeyecek.

Koşucu asla ileri doğru hareket etmez. Yalnızca üç şerit arasında hareket eder: sol, orta ve sağ. Şerit numarasını -1, 0 veya 1 değerlerinden biri olan bir tam sayı olarak tut ve bunun x eksenindeki konumunu hesapla:

float targetX = lane * laneWidth;

Koşucuda bir CharacterController var, bu yüzden controller.Move(motion) ile hareket ediyor: Move, bu karede ne kadar ilerleyeceğini alır; varacağı konumu değil. targetX konumuna ulaşmak için, koşucunun şu anki konumu ile bu konum arasındaki fark kadar ilerle:

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

Mathf.Max(-1, lane - 1), lane - 1 değeridir ama hiçbir zaman -1’den küçük olmaz; böylece en soldaki şeridin ötesinde bir şerit bulunmaz.

challenge icon

Görev

Kolay
  1. Runner.Update içinde, A veya sol ok tuşuna basıldığında (Input.GetKeyDown), lane = Mathf.Max(-1, lane - 1) değerini ayarla.
  2. D veya sağ ok tuşuna basıldığında lane = Mathf.Min(1, lane + 1) değerini ayarla.
  3. Ardından, yukarıdaki gibi targetX değerini hesapla ve controller.Move ile koşucuyu oraya taşı.
  4. “Oyna”ya bas ve A ile D tuşlarını dene.

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()
    {
        // burada şerit değiştir
    }
}

Unity Oyunu: Gökyüzü Şeritleri bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground