Duvarlar
Coddy'nin Unity'de 3D Yılan Oyunu kursunda ders 4 / 14.
Tahtanın hücreleri x ve z eksenlerinde -7 ile 7 arasında yer alır; bu nedenle bir hücre, hem x hem de z değeri -7 ile 7 arasındaysa tahtanın üzerindedir. Tahta 0 merkezli olduğundan, tek bir test her iki tarafı da kapsar: Mathf.Abs(x) > 7 iki kenardan herhangi birini geçtiğinde true olur.
Kafanın girmek üzere olduğu hücreyi, oraya hareket etmeden önce test et. Böylece duvara çarpan yılan, sınırın içine düşmek yerine tahtanın son hücresinde kalır. 0'dan 7'ye numaralandırılmış bir satranç tahtasındaki kale de aynı şekilde kontrol edilir:
Vector3 target = transform.position + move;
if (target.x < 0 || target.x > 7 || target.z < 0 || target.z > 7)
{
return; // tahtanın dışında: kale yerinde kalır
}
transform.position = target;Duvara çarpmak oyunu bitirir ve yılan tamamen durur. Update() metodunun önce kontrol ettiği bir bool bunu sağlar: en baştaki bir return, hem tuşları hem de zamanlayıcıyı atlar.
Görev
Kolaypublic int edge = 7;ekleyin (tahtanın hücreleri-edgeileedgearasında yer alır) vepublic bool alive = true;ekleyin.Step()içinde,directiondeğerini ayarladıktan sonra, başın girmek üzere olduğu hücre olannextdeğerini hesaplayın. Tahtanın dışındaysaDie()metodunu çağırın ve hareket etmeden geri dönün; aksi hâlde başınextkonumuna taşıyın.alivedeğerini false yapanvoid Die()metodunu yazın.- Yılan canlı değilse geri dönecek şekilde
Update()metoduna bir return ifadesiyle başlayın; böylece ölü bir yılan ne yön değiştirir ne de hareket eder.
Play'e basın, duvara doğru yönlendirin, ardından Check'e basın.
Kendin dene
using UnityEngine;
using UnityEngine.InputSystem;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // iki adım arasındaki saniye sayısı
private float timer;
private Vector3 direction = Vector3.right; // başın son adımda hareket ettiği yön
private Vector3 nextDirection = Vector3.right; // bir sonraki adımda uygulanacak dönüş
void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard != null)
{
if (keyboard.upArrowKey.wasPressedThisFrame || keyboard.wKey.wasPressedThisFrame) Turn(Vector3.forward);
if (keyboard.downArrowKey.wasPressedThisFrame || keyboard.sKey.wasPressedThisFrame) Turn(Vector3.back);
if (keyboard.leftArrowKey.wasPressedThisFrame || keyboard.aKey.wasPressedThisFrame) Turn(Vector3.left);
if (keyboard.rightArrowKey.wasPressedThisFrame || keyboard.dKey.wasPressedThisFrame) Turn(Vector3.right);
}
timer += Time.deltaTime;
if (timer >= tick)
{
timer -= tick;
Step();
}
}
void Turn(Vector3 newDirection)
{
if (newDirection != -direction)
{
nextDirection = newDirection;
}
}
void Step()
{
direction = nextDirection;
transform.position += direction;
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.