Deixe com a sua cara
Lição 14 de 14 do curso Jogo de Cobra 3D na Unity da Coddy.
Falta um recurso: uma melhor pontuação que continue salva depois de fechar o jogo. PlayerPrefs a mantém: leia-a com um valor padrão em Start() e salve-a quando o jogo terminar, se a pontuação superar a melhor pontuação. Em um jogo de corrida, a melhor volta funciona ao contrário, já que um tempo menor é melhor:
if (lapTime < bestLap)
{
bestLap = lapTime;
PlayerPrefs.SetFloat("BestLap", bestLap);
}Agora você pode ajustar o jogo como quiser. Os números de Snake definem como ele se comporta: tick 0.25 proporciona um começo tranquilo, e 0.1, um começo rápido; speedUp 0.01 faz a cobra acelerar mais cedo; e minTick 0.05 deixa o final do jogo frenético. O Inspector deste jogador é somente leitura, e a cena do curso mantém esses três campos nos valores do seu código. Portanto, altere-os onde são declarados e pressione Play. No seu próprio projeto Unity, altere-os no componente Snake, no Inspector: um novo valor padrão no código não é aplicado a um componente que já está em uma cena.
Desafio
Difícil- Em
GameManager, adicionepublic TMP_Text bestText;(a cena o define como BestText, no canto superior direito) eprivate int best;. - Em
Start(), carreguebestda chaveBestScore, usando 0 quando nada estiver salvo, e exiba-o comoBest: 0. - Em
GameOver(), quandoscoresuperarbest, torne-o o melhor, salve-o emBestScoree exiba-o.
Pressione Play e, em seguida, pressione Check. Depois jogue e ajuste tick, speedUp e minTick até o jogo ficar do jeito que você gosta.
Experimente você mesmo
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)];
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.