Menu
CoddyTech

Koşucu

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 75 / 85.

Bu bölümde küçük bir oyun olan Bloklardan Kaçış’ı yapacağız. Bloklar gökyüzünden düşerken bir koşucuyu şerit boyunca yönlendirirsin ve tek bir dokunuş koşuyu bitirir. Oyunun tamamı, her derste yeni bir özellik kazanan Runner betiğinden oluşur: yönlendirme, düşen bloklar, blokları temizleme, çarpışma ve puan.

İlk özellik, şeritte kalmayı sağlayan yönlendirmedir. Bunun için Catch the Star’dan Mathf.Clamp(value, min, max) kullanılır: değer aralığın altındaysa min, üstündeyse max, aksi hâlde değerin kendisini döndürür. Clamp’in nereye yerleştirildiği önemlidir. Bu şarj göstergesi, Space basılı tutulduğunda dolar, basılı tutulmadığında boşalır ve 0 ile 10 aralığının dışına asla çıkmaz:

[SerializeField] private float charge = 0f;

void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        charge += 4f * Time.deltaTime;
    }
    else
    {
        charge -= 2f * Time.deltaTime;
    }
    charge = Mathf.Clamp(charge, 0f, 10f);
    transform.localScale = new Vector3(0.5f, charge, 0.5f);
}

Clamp, değişiklikten sonra uygulanır. Önce clamp uygulanırsa değer, kare sonunda sınırı bir adım aşabilir ve çubuk bu değere göre çizilir. Mathf.Clamp ayrıca, kendisine verdiğin değişkeni değiştirmek yerine yeni bir sayı döndürür; bu yüzden sonucu değişkene yeniden atamalısın.

challenge icon

Görev

Orta

Dodge the Blocks'ı başlat: koşucuyu şeridi boyunca yönlendir.

  1. Update() içinde, transform.position değerini Vector3 p içine kopyala ve Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime değerini p.x değerine ekle. Ham eksen, hareketi anında tam hızda sağlar.
  2. p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge); ayarla, ardından transform.position = p; ayarla.

“Oyna” düğmesine bas, oyuna tıkla ve iki uca kadar koş: koşucu kenarlarda durur. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class Runner : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    [SerializeField] private float laneEdge = 4f;

    void Update()
    {
        // ok tuşlarıyla x ekseni boyunca hareket et, ardından x konumunu şeritte tut
    }
}

Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground