Menu
CoddyTech

Üç Şerit

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

Bu bölümde bir Sonsuz Koşucu oyunu oluşturuluyor. Koşucu, üç şeritli bir yolda ilerler ve üzerine gelen engellerden kaçmak için şerit değiştirir. Sonraki derslerde yol hızlanır, mesafe ekranda gösterilir, bir ç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; şimdilik son üçü boştur.

Şeritlerde ilerleyen bir koşucu araba gibi yönlendirilmez: her zaman birkaç sabit 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 temizleme platformu, aralarında 3 birim bulunan bir binanın 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 ile tek bir basışta bir kat ilerlenir; GetKey ise tuş basılı tutulduğu her karede bir kat eklerdi. Mathf.Clamp sayıyı binanın sınırları içinde tutar; böylece en üst kattayken yukarı basmak işe yaramaz ve sonraki aşağı basış doğrudan 3. kata götürür. Mathf.MoveTowards platformu saniyede moveSpeed birim hızla katına doğru kaydırır ve tek karede oraya sıçratmak yerine tam üzerinde durdurur. Konumun bir kopyası değiştirilip geri atanır; çünkü transform.position.y tek başına ayarlanamaz.

challenge icon

Görev

Orta

Endless Runner'ı koşucuyla başlat. Inspector, Runner'a 2.5 laneWidth ve 15 laneSpeed değeri verir; lane ise sol şerit için -1, orta şerit için 0 ve sağ şerit için 1'dir. Runner'ın Update() metodunda:

  • Sol veya sağ ok tuşuna her basış lane değerini ilgili yönde bir değiştirir. Tuşu basılı tutmak da değeri bir değiştirir.
  • lane hiçbir zaman -1'in altına veya 1'in üstüne çıkmaz.
  • Koşucu x ekseni boyunca, saniyede laneSpeed birim hızla lane * laneWidth değerine doğru kayar ve y ile z değerlerini korur.

Şimdilik diğer üç betiği olduğu gibi bırak. Play'e bas, oyuna tıkla ve şerit değiştir; ardından Check'e bas.

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
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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