Kendine Özgü Hale Getir
Coddy'nin Unity'de 3D Yılan Oyunu kursunda ders 14 / 14.
Bir özellik kaldı: oyun kapatıldıktan sonra da kalan en yüksek skor. PlayerPrefs bunu saklar: Start() içinde varsayılan bir değerle okuyun ve skor bu değeri geçtiğinde oyun bittiğinde kaydedin. Bir yarış oyunu, daha düşük bir süre daha iyi olduğu için en iyi tur zamanını tam tersi şekilde tutar:
if (lapTime < bestLap)
{
bestLap = lapTime;
PlayerPrefs.SetFloat("BestLap", bestLap);
}Artık oyunu kendi zevkinize göre ayarlayabilirsiniz. Snake'in sayıları oyunun hissini belirler: tick için 0.25 sakin bir başlangıç, 0.1 ise hızlı bir başlangıç sağlar; speedUp için 0.01 yılanı daha erken hızlandırır ve minTick için 0.05 çılgın tempolu bir son oyun sağlar. Bu oyuncunun Inspector'ı salt okunurdur ve kursun sahnesinde bu üç alan kodunuzdaki değerlerde bırakılmıştır; bu yüzden değerleri tanımlandıkları yerde değiştirin ve Play'e basın. Kendi Unity projenizde bunları Inspector'daki Snake bileşeninde değiştirin: kodda yeni bir varsayılan değer belirlemek, sahnede zaten bulunan bir bileşene yansımaz.
Görev
ZorGameManageriçindepublic TMP_Text bestText;ekle (sahne bunu sağ üstteki BestText'e ayarlar) veprivate int best;ekle.Start()içindebestdeğeriniBestScoreanahtarından yükle; kayıtlı bir değer yoksa 0 kullan ve bunuBest: 0olarak göster.GameOver()içindescoredeğeribestdeğerini geçtiğinde, bunu en iyi skor yap,BestScoreanahtarıyla kaydet ve göster.
Play'e bas, ardından Check'e bas. Sonra oyna ve oyun sana doğru hissettirene kadar tick, speedUp ve minTick değerlerini ayarla.
Kendin dene
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public Snake snake;
public GameObject foodPrefab;
public TMP_Text scoreText;
public GameObject gameOverPanel;
public Button playAgainButton;
private Transform food;
private int score;
void Awake()
{
Instance = this;
}
void Start()
{
scoreText.text = "Score: 0";
playAgainButton.onClick.AddListener(PlayAgain);
food = Instantiate(foodPrefab).transform;
MoveFood();
}
public bool IsFood(Vector3 cell)
{
return cell == food.position;
}
public void Eat()
{
score++;
scoreText.text = "Score: " + score;
MoveFood();
}
public void GameOver()
{
gameOverPanel.SetActive(true);
}
void PlayAgain()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
void MoveFood()
{
List<Vector3> free = new List<Vector3>();
for (int x = -snake.edge; x <= snake.edge; x++)
{
for (int z = -snake.edge; z <= snake.edge; z++)
{
Vector3 cell = new Vector3(x, 0f, z);
if (!snake.Occupies(cell))
{
free.Add(cell);
}
}
}
food.position = free[Random.Range(0, free.Count)];
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.