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 etutiliser
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 = FindObjectsByType<GameSession>().Length; // FindObjectsByType<GameSession>(FindObjectsSortMode.None) pour Unity 6.0
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 avecFindAnyObjectByType<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 points de vie 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). Vous pouvez utilisez les sprites
tiles_34ettiles_35(ou 36/37, 38/39).
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 mettresfx_coin.ogg.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 objet Heart sans animation avec le sprite
tiles_63de la même façon que la pièce et attachez-y le même scriptPickup.csavec le sfxsfx_gem.ogg.Ajoutez le sfx
sfx_disappear.oggà la mort de Player.
Background Music¶
Créez un Game Object vide nommé Background Music.
Ajoutez-y une composante Audio Source.
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.