Ye
Coddy'nin Unity Oyunu: 3D Yılan kursunda ders 6 / 14.
Yılan, başı yiyeceğin hücresine geldiğinde onu yer. İkisi de tam sayılar üzerinde durduğundan, konumlarını == ile karşılaştırmak güvenlidir: Unity'de Vector3 için ==, iki konum arasındaki mesafe 0.00001'den küçük olduğunda bu konumları eşit sayar ve tam hücreler eklemek asla bu kadar küçük bir boşluk bırakmaz.
Yılan ne zaman adım attığını bilir; yiyeceğin nerede olduğunu ve skoru ise GameManager bilir. Bu yüzden yılan her adımdan sonra sorar, GameManager da yanıtlar: IsFood(cell) bir bool döndürür; Eat() ise bir puan ekler ve yiyeceği taşır. Yılan, C# for Unity yolculuğunda tanıştığın singleton olan statik Instance üzerinden GameManager'a ulaşır.
Hamlenin ardından, başın girdiği hücreyi kontrol et. Bir ızgaradaki anahtar da aynı şekilde alınır:
transform.position = next;
if (key.position == transform.position)
{
keysHeld++;
key.gameObject.SetActive(false);
}Görev
OrtaYılan yiyeceği yer ve bir puan kazanır.
GameManageriçindepublic static GameManager Instance;ekle, bunuAwake()içinde ayarla veprivate int score;ekle.public bool IsFood(Vector3 cell): cell yiyeceğin konumundaysa true döndürür.public void Eat(): bir puan daha ekler, ardındanMoveFood()çağrılır.Snakeiçinde,Step()metodunun sonunda:GameManager.Instance.IsFood(next)doğruysaEat()çağır.
“Oyna” düğmesine bas ve yiyeceğe doğru ilerle: yiyecek yeni bir hücreye atlar. Ardından “Kontrol et” düğmesine bas.
Kendin dene
using UnityEngine;
public class GameManager : MonoBehaviour
{
public Snake snake;
public GameObject foodPrefab;
private Transform food;
void Start()
{
food = Instantiate(foodPrefab).transform;
MoveFood();
}
void MoveFood()
{
int x = Random.Range(-snake.edge, snake.edge + 1);
int z = Random.Range(-snake.edge, snake.edge + 1);
food.position = new Vector3(x, 0f, z);
}
}
Unity Oyunu: 3D Yılan bölümündeki tüm dersler
Kendi başına pratik yap: Unity playground