Menu
CoddyTech

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.

challenge icon

Görev

Kolay
  1. public int edge = 7; ekleyin (tahtanın hücreleri -edge ile edge arasında yer alır) ve public bool alive = true; ekleyin.
  2. Step() içinde, direction değerini ayarladıktan sonra, başın girmek üzere olduğu hücre olan next değerini hesaplayın. Tahtanın dışındaysa Die() metodunu çağırın ve hareket etmeden geri dönün; aksi hâlde başı next konumuna taşıyın.
  3. alive değerini false yapan void Die() metodunu yazın.
  4. 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;
    }
}
quiz iconKendini test et

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

Unity'de 3D Yılan Oyunu bölümündeki tüm dersler