Sesuaikan dengan Keinginanmu
Pelajaran 14 dari 14 dalam kursus Game Unity: Snake 3D di Coddy.
Satu fitur lagi: skor terbaik yang tetap tersimpan setelah game ditutup. PlayerPrefs menyimpannya: baca nilainya dengan nilai default di Start(), lalu simpan saat game over jika skor mengalahkan skor terbaik. Game balap menyimpan lap terbaik dengan cara sebaliknya, karena waktu yang lebih rendah lebih baik:
if (lapTime < bestLap)
{
bestLap = lapTime;
PlayerPrefs.SetFloat("BestLap", bestLap);
}Setelah itu, kamu bisa mengatur game sesuai keinginanmu. Angka-angka di Snake menentukan nuansanya: tick 0.25 membuat awal yang tenang dan 0.1 membuat awal yang cepat, speedUp 0.01 mempercepat ular lebih awal, dan minTick 0.05 membuat bagian akhir game berlangsung sangat intens. Inspector pemain ini hanya bisa dibaca, dan scene kursus menetapkan ketiga field ini ke nilai yang ada di kodemu, jadi ubah nilainya di tempat deklarasinya lalu tekan Play. Dalam proyek Unity-mu sendiri, ubah nilainya pada komponen Snake di Inspector: nilai default baru di kode tidak akan diterapkan ke komponen yang sudah ada di scene.
Tantangan
Sulit- Di
GameManager, tambahkanpublic TMP_Text bestText;(scene mengaturnya ke BestText, di kanan atas) danprivate int best;. - Di
Start(), muatbestdari kunciBestScore, dengan nilai 0 jika belum ada yang disimpan, lalu tampilkan sebagaiBest: 0. - Di
GameOver(), saatscoremengalahkanbest, jadikanscoresebagai skor terbaik, simpan dengan kunciBestScore, lalu tampilkan.
Tekan Play, lalu tekan Check. Setelah itu, bermainlah dan sesuaikan tick, speedUp, dan minTick sampai permainan terasa pas bagimu.
Coba sendiri
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)];
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.