Menu
CoddyTech

Deixe com a sua cara

Lição 14 de 14 do curso Jogo 3D da Cobrinha 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.

challenge icon

Desafio

Difícil

Mantenha a melhor pontuação entre as partidas e, depois, ajuste o jogo.

  1. Em GameManager, adicione public TMP_Text bestText; e private int best;
  2. Em Start(), use best = PlayerPrefs.GetInt("BestScore", 0); e exiba "Best: " + best.
  3. Em GameOver(), quando a pontuação superar a melhor, atualize best, salve o valor em BestScore e exiba-o.
  4. Ajuste tick, speedUp e minTick onde são declarados em Snake.

Pressione “Jogar”, defina uma melhor pontuação e jogue novamente: a melhor pontuação permanece no canto superior direito. Depois, pressione “Verificar”.

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)];
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Jogo 3D da Cobrinha na Unity

Pratique por conta própria: Playground de Unity