Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Tutoriel 8 : Game Session Controller, Destroy, Tags, Audio

IUT d'Orsay, Université Paris-Saclay

Objectifs

Nous allons apprendre à :

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.

  1. Créez un objet vide nommé Game Session et attachez-y un script GameSession.cs.

  2. 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);
    }
}
  1. Dans GameSession.cs, ajoutez une fonction public void ProcessPlayerDeath() avec le code suivant.

if(playerLives > 1){
    TakeLife();
}
else{
    ResetGameSessions();
}
  1. Ajoutez l’attribut playerLives et implémentez les méthodes TakeLife et ResetGameSessions.

  2. Dans PlayerMovement.cs > Die, récupérez la Game Session avec FindAnyObjectByType<GameSession>() et appelez ProcessPlayerDeath. Vous pouvez introduire un délai en refactorisant ce bout de code et utiliser Invoke pour avoir le temps de voir l’animation de mort de Player.

Pickups

  1. 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.

  1. 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_34 et tiles_35 (ou 36/37, 38/39).

Tags

Nous allons apprendre à utiliser des tags pour nous aider à identifier les Game Objects.

  1. Ajoutez le tag Player à Player.

Quand Player touche une pièce, nous voulons qu’elle soit ramassée (détruite).

  1. Ajoutez un Collider Trigger à votre pièce et attachez-y un script Pickup.cs.

  2. Dans Pickup.cs, ajoutez la méthode OnTriggerEnter2D dans laquelle nous allons vérifier que si other.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.

  1. Téléchargez ce .zip contenant les sfx.

  2. Mettez les sfx dans Assets/Audio.

  3. Ajoutez une composante Audio Source à la pièce.

  4. Ajoutez un attribut [SerializeField] AudioClip pickupSFX au script Pickup.cs dans lequel vous allez mettre sfx_coin.ogg.

  5. Juste avant de détruire la pièce, appelez AudioSource.PlayClipAtPoint(pickupSFX, Camera.main.transform.position).

  1. Vous pouvez jouer avec les paramètres dans Audio Source pour modifier le sfx.

  2. Créez un objet Heart sans animation avec le sprite tiles_63 de la même façon que la pièce et attachez-y le même script Pickup.cs avec le sfx sfx_gem.ogg.

  3. Ajoutez le sfx sfx_disappear.ogg à la mort de Player.

Background Music

  1. Créez un Game Object vide nommé Background Music.

  2. Ajoutez-y une composante Audio Source.

  3. 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.