Menu
CoddyTech

Üç Şerit

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 27 / 60.

Bu bölümde bir Sonsuz Koşu oyunu oluşturuluyor. Koşucu, üç şeritli bir yolda ilerler ve kendisine doğru gelen engellerden kaçmak için şerit değiştirir. Sonraki derslerde yol hızlanır, mesafe ekranda gösterilir, çarpışma koşuyu bitirir ve yeniden koşmak için bir düğme belirir, ayrıca en iyi koşu kaydedilir. Koşucu asla ileri hareket etmez: z = 0 konumunda kalır ve engeller ona doğru ilerler; böylece yol hiç bitmez. Oyunda dört betik vardır: Runner, Spawner, Obstacle ve GameManager. Son üçü şimdilik boştur.

Şeritler arasında koşan bir karakter, araba gibi yönlendirilmez: her zaman belirli birkaç konumdan birinde bulunur. Konumu tam sayı olarak tut, bir tuşa basıldığında sayıyı değiştir ve konumu bu sayıdan hesapla. Bu pencere temizleyicisinin platformu, bir binanın birbirinden 3 birim uzaklıktaki beş katına hizmet eder:

[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
    if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
    floor = Mathf.Clamp(floor, 0, 4);

    Vector3 p = transform.position;
    p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
    transform.position = p;
}

GetKeyDown, tek bir basışın tek bir kat ilerletmesini sağlar; GetKey ise tuş basılı tutulduğu her karede bir kat daha ilerletirdi. Mathf.Clamp sayıyı binanın sınırları içinde tutar; böylece en üst kattayken yukarı basmak hiçbir şey yapmaz, sonraki aşağı basışta ise doğrudan 3. kata inilir. Mathf.MoveTowards, platformu saniyede moveSpeed birim hızla katına doğru kaydırır ve orada tam olarak durdurur; böylece tek karede oraya sıçramaz. Konum kopyalanır, değiştirilir ve geri atanır; çünkü transform.position.y tek başına ayarlanamaz.

challenge icon

Görev

Orta

Okların koşucuyu üç şerit arasında hareket ettirmesini sağlayın.

  1. Runner içindeki Update() bölümünde, Input.GetKeyDown(KeyCode.LeftArrow) olduğunda lane-- uygulayın; sağ ok için lane++ uygulayın.
  2. Yol üzerinde kalmasını sağlayın: lane = Mathf.Clamp(lane, -1, 1);.
  3. transform.position değerini p içine kopyalayın, p.x değerini Mathf.MoveTowards ile lane * laneWidth hedefine doğru laneSpeed * Time.deltaTime hızıyla hareket ettirin ve p değerini geri atayın.

“Oyna” düğmesine basın, oyuna tıklayın ve şerit değiştirin: koşucu kayarak ilerler. Ardından “Kontrol et” düğmesine basın.

Kendin dene

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;
    public float laneSpeed = 15f;
    private int lane = 0;   // -1 sol şerit, 0 orta şerit, 1 sağ şerittir

    void Update()
    {
        // Ok tuşlarıyla şerit değiştir, ardından şeridin x konumuna doğru kay
    }
}

Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground