Kendine Özgü Hale Getir
Coddy'nin Unity Oyunu: 3D Yılan 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
ZorOyunlar arasında en iyi skoru koru, ardından oyunu ayarla.
GameManageriçindepublic TMP_Text bestText;veprivate int best;ekle.Start()içindebest = PlayerPrefs.GetInt("BestScore", 0);yaz ve"Best: " + bestdeğerini göster.GameOver()içinde skor en iyi skoru geçtiğinde best değerini ayarla,BestScoreadıyla kaydet ve göster.tick,speedUpveminTickdeğerlerini Snake içinde tanımlandıkları yerde ayarla.
“Oyna” düğmesine bas, bir en iyi skor belirle ve tekrar oyna: Best sağ üstte kalır. Ardından “Kontrol et” düğmesine bas.
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.
Unity Oyunu: 3D Yılan bölümündeki tüm dersler
Kendi başına pratik yap: Unity playground