Personnalisez-le
Leçon 16 sur 16 du cours Jeu Unity : casse-briques de Coddy.
La dernière fonctionnalité est un meilleur score conservé d’une partie à l’autre. PlayerPrefs stocke de petites valeurs sur l’appareil du joueur : PlayerPrefs.GetInt(key, 0) en lit une, avec 0 si rien n’a encore été enregistré, et PlayerPrefs.SetInt(key, value) en enregistre une. Charge le meilleur score au démarrage du jeu et enregistre-le à la fin d’une partie si le score est supérieur. Play Again recharge la scène, et le nouveau GameManager charge à nouveau le meilleur score.
Ensuite, tu peux régler le jeu à ta convenance. Chaque nombre qui détermine son fonctionnement est un champ doté d’une valeur initiale dans le code :
Ball:speed(9) etminVertical(0.3).Paddle:speed(14),wideFactor(1.6) etwideSeconds(8).GameManager:lives(3),dropChance(0.15) et l’espacement des briques.
Les dispositions sont dans la liste levels de GameManager, dans l’Inspector : un chiffre représente une brique avec autant de points de vie, un point représente un espace vide et / commence la ligne suivante, par exemple 1.3.1/22222. Dans ton propre projet Unity, modifie les valeurs dans l’Inspector : une fois qu’un script est associé à un objet, l’Inspector en conserve sa propre copie, et toute nouvelle valeur initiale définie dans le code ne lui est plus transmise.
Défi
Difficile- Dans
GameManager, ajoutepublic TMP_Text bestText(la scène relie BestText) et unint best. DansStart(), chargebestdepuis PlayerPrefs avec la cléBestScoreet la valeur 0 si rien n’est enregistré.ShowHud()affiche aussiBest: 0dansbestText, avec le meilleur score. - Lorsque la partie se termine avec un score supérieur à
best, enregistre-le dansbest, sauvegarde-le sousBestScoreet affiche-le.
Ensuite, personnalise le jeu : modifie les vitesses, le nombre de vies, la probabilité d’apparition et la puissance des bonus, puis joue jusqu’à ce que le résultat te convienne.
Appuie sur Play, établis un meilleur score, puis Check.
Essayez vous-même
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public Brick brickPrefab;
public Transform wall;
public string[] levels;
public float spacingX = 1.75f;
public float spacingY = 0.75f;
public float topY = 6f;
public Ball ball;
public int lives = 3;
public TMP_Text scoreText;
public TMP_Text livesText;
public GameObject gameOverPanel;
public GameObject[] powerUps;
public float dropChance = 0.15f;
int score;
int level;
int bricksLeft;
List<Ball> balls = new List<Ball>();
void Awake()
{
Instance = this;
}
void Start()
{
balls.Add(ball);
BuildLevel(0);
ShowHud();
}
void BuildLevel(int index)
{
level = index;
string[] rows = levels[index].Split('/');
for (int row = 0; row < rows.Length; row++)
{
string line = rows[row];
float left = -(line.Length - 1) * spacingX / 2f;
for (int col = 0; col < line.Length; col++)
{
char c = line[col];
if (c == '.') continue;
Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
brick.SetHits(c - '0');
bricksLeft++;
}
}
}
public void BrickBroken(Brick brick)
{
score += brick.points;
bricksLeft--;
ShowHud();
if (Random.value < dropChance)
{
GameObject prefab = powerUps[Random.Range(0, powerUps.Length)];
Instantiate(prefab, brick.transform.position, Quaternion.identity);
}
if (bricksLeft == 0)
{
balls[0].ResetToPaddle();
BuildLevel((level + 1) % levels.Length);
}
}
public void BallLost(Ball lost)
{
if (balls.Count > 1)
{
balls.Remove(lost);
Destroy(lost.gameObject);
return;
}
lives--;
ShowHud();
if (lives == 0)
{
gameOverPanel.SetActive(true);
lost.gameObject.SetActive(false);
}
else lost.ResetToPaddle();
}
public void SplitBall()
{
Ball source = balls[0];
Ball left = Instantiate(source, source.transform.position, Quaternion.identity);
left.Launch(new Vector3(-0.6f, 1f, 0f));
balls.Add(left);
Ball right = Instantiate(source, source.transform.position, Quaternion.identity);
right.Launch(new Vector3(0.6f, 1f, 0f));
balls.Add(right);
}
public void PlayAgain()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
void ShowHud()
{
scoreText.text = "Score: " + score;
livesText.text = "Lives: " + lives;
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.