U Dönüşü Yok
Coddy'nin Unity Oyunu: 3D Yılan kursunda ders 3 / 14.
Düz bir şekilde geri dönen yılan kendi boynuna çarpar; bu nedenle ters yöne yapılan dönüş yok sayılır. Bir yönün tersi, onun negatifidir: yılan sağa doğru hareket ederken -direction, Vector3.left olur.
Bir tuşa basılması yönü anında değiştirdiğinde direction ile karşılaştırmak yeterli olmaz: sağa doğru hareket ederken oyuncu tek bir tik içinde önce yukarı, ardından sola basar. Yukarı yönüne izin verilir, sonra sola dönüş yukarı yönüyle karşılaştırılır ve ona da izin verilir; sonraki adımda yılan boynunun üzerinden geri döner.
Bu yüzden iki yön tut: başın en son hareket ettiği yön olan direction ve sonraki adım için bekleyen dönüş olan nextDirection. Bir tuş, direction ile karşılaştırdıktan sonra nextDirection değerini değiştirir; sonraki adımda bekleyen dönüş gerçekleşir.
Görev
KolayYılanın doğrudan boynuna doğru dönmesini engelle.
private Vector3 nextDirection = Vector3.right;vevoid Turn(Vector3 newDirection)ekle:newDirection == -directionolmadığı sürece nextDirection değerini ayarla.Update()içinde her tuş, direction değerini ayarlamak yerine kendi yönünüTurnişlevine iletsin.Step()işlevinin başındadirection = nextDirection;ayarla.
“Oyna” düğmesine bas ve sağa doğru hareket ederken sola bas: yılan sağa doğru ilerlemeye devam eder. Ardından “Kontrol et” düğmesine bas.
Kendin dene
using UnityEngine;
using UnityEngine.InputSystem;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // iki adım arasındaki saniye cinsinden süre
private float timer;
private Vector3 direction = Vector3.right;
void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard != null)
{
if (keyboard.upArrowKey.wasPressedThisFrame || keyboard.wKey.wasPressedThisFrame) direction = Vector3.forward;
if (keyboard.downArrowKey.wasPressedThisFrame || keyboard.sKey.wasPressedThisFrame) direction = Vector3.back;
if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame) direction = Vector3.left;
if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame) direction = Vector3.right;
}
timer += Time.deltaTime;
if (timer >= tick)
{
timer -= tick;
Step();
}
}
void Step()
{
transform.position += direction;
}
}
Unity Oyunu: 3D Yılan bölümündeki tüm dersler
Kendi başına pratik yap: Unity playground