Üç Ş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.
Görev
OrtaOkların koşucuyu üç şerit arasında hareket ettirmesini sağlayın.
RunneriçindekiUpdate()bölümünde,Input.GetKeyDown(KeyCode.LeftArrow)olduğundalane--uygulayın; sağ ok içinlane++uygulayın.- Yol üzerinde kalmasını sağlayın:
lane = Mathf.Clamp(lane, -1, 1);. transform.positiondeğerinipiçine kopyalayın,p.xdeğeriniMathf.MoveTowardsilelane * laneWidthhedefine doğrulaneSpeed * Time.deltaTimehızıyla hareket ettirin vepdeğ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
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi2Düğmeler ve Ekranlar
Düğmeler ve onClickLambda İfadeleriInspector'da Bağlantı KurmaPanelleri Açma ve KapamaCan ÇubuklarıTekrar: Yükseltme Mağazası5PlayerPrefs ile Kaydetme
Bir Sayı KaydetmeVarsayılan Değerle YüklemeEn Yüksek SkorAyarları KaydetmeTekrar: Bankadaki Paralar3Oyun Yöneticisi
Oyunu Tek Bir Betik YönetiyorSingletonOyun DurumlarıDuruma Göre GeçişÖzet: Tur Yöneticisi6Proje: Sonsuz Koşucu
Üç ŞeritÖnümüzde EngellerKendi başına pratik yap: Unity playground