Menu
CoddyTech

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.

challenge icon

Görev

Zor

Oyunlar arasında en iyi skoru koru, ardından oyunu ayarla.

  1. GameManager içinde public TMP_Text bestText; ve private int best; ekle.
  2. Start() içinde best = PlayerPrefs.GetInt("BestScore", 0); yaz ve "Best: " + best değerini göster.
  3. GameOver() içinde skor en iyi skoru geçtiğinde best değerini ayarla, BestScore adıyla kaydet ve göster.
  4. tick, speedUp ve minTick değ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)];
    }
}
quiz iconKendini test et

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