Tutoriel 8 : Game Session Controller, Destroy, Tags, Audio
Objectifs¶
Nous allons apprendre à :
- créer un objet controller qui garde des données en mémoire entre les scènes,
- utiliser
Destroypour supprimer des objets, - utiliser
Tagspour identifier des objets et - utiliser
AudioSourcepour jouer des sons.
Game Session Controller¶
Nous voulons imiter le comportement de Mario lorsque notre personnage meurt : si Player perd un point de vie, il doit recommencer le niveau actuel, et s’il perd tous ses points de vie, il sera redirigé vers un écran Game Over.
Pour conserver les données en mémoire entre les scènes, nous allons utiliser un objet Game Session Controller.
Créez un objet vide nommé Game Session et attachez-y un script
GameSession.cs.Dans
GameSession.cs, ajoutez la fonction suivante.
void Awake(){
int numberOfGameSessions = FindObjectsOfType<GameSession>().Length; // Unity 6 syntax: FindObjectsByType<GameSession>(FindObjectsSortMode.None).Length
if(numberOfGameSessions > 1){
Destroy(gameObject);
}
else{
DontDestroyOnLoad(gameObject);
}
}- Dans
GameSession.cs, ajoutez une fonctionpublic void ProcessPlayerDeath()avec le code suivant.
if(playerLives > 1){
TakeLife();
}
else{
ResetGameSessions();
}Ajoutez l’attribut
playerLiveset implémentez les méthodesTakeLifeetResetGameSessions.Dans
PlayerMovement.cs>Die, récupérez la Game Session avecFindObjectOfType<GameSession>()(dans Unity 6, la syntaxe estFindAnyObjectByType<GameSession>()) et appelezProcessPlayerDeath. Vous pouvez introduire un délai en refactorisant ce bout de code et utiliserInvokepour avoir le temps de voir l’animation de mort de Player.
Pickups¶
- Réorganisez votre Hierarchy en ajoutant des Game Objects vide nommés Enemies et Coins avec comme enfants les ennemies et les items comme les pièces et les champignons que nous allons créer ci-dessous.
Organisation de la Hierarchy
Gardez votre Hierarchy organisé dans le futur, cela vous aidera beaucoup lorsque vous aurez besoin de trouver des objets spécifiques.
- Utilisez ce que vous avez appris pour créer une pièce avec une animation avec comme layers Interactables (comme la sortie).
Tags¶
Nous allons apprendre à utiliser des tags pour nous aider à identifier les Game Objects.
- Ajoutez le tag Player à Player.
Quand Player touche une pièce, nous voulons qu’elle soit ramassée (détruite).
Ajoutez un Collider Trigger à votre pièce et attachez-y un script
Pickup.cs.Dans
Pickup.cs, ajoutez la méthodeOnTriggerEnter2Ddans laquelle nous allons vérifier que siother.tag == "Player"alors nous allons détruire l’objet courant (la pièce).
SFX¶
Nous allons ajouter un SFX à la pièce quand elle est ramassée.
Téléchargez ce
.zipcontenant les sfx.Mettez les sfx dans
Assets/Audio.Ajoutez une composante Audio Source à la pièce.
Ajoutez un attribut
[SerializeField] AudioClip pickupSFXau scriptPickup.csdans lequel vous allez mettrecoin_pickup.mp3.Juste avant de détruire la pièce, appelez
AudioSource.PlayClipAtPoint(pickupSFX, Camera.main.transform.position).
Vous pouvez jouer avec les paramètres dans Audio Source pour modifier le sfx.
Créez un champignon (sans animation et dont le sprite vous pouvez trouver gratuitement sur l’Asset Store d’Unity) de la même façon que la pièce et attachez-y le même script
Pickup.csavec le bon sfx.Ajoutez un sfx à la sortie du niveau.
Ajoutez un sfx de mort à Player.
Background Music¶
Créez un Game Object vide nommé Background Music.
Ajoutez une composante Audio Source au Game Object.
Ajoutez une musique de votre choix comme musique de fond à votre niveau et vérifiez bien que Play On Awake et Loop sont cochés.
Vous pouvez maintenant faire un commit
fin du tutoriel 8.