Skip to article frontmatterSkip to article content

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 = FindObjectsOfType<GameSession>().Length; // Unity 6 syntax: FindObjectsByType<GameSession>(FindObjectsSortMode.None).Length
    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 FindObjectOfType<GameSession>() (dans Unity 6, la syntaxe est 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 champignons 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).

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 coin_pickup.mp3.

  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 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.cs avec le bon sfx.

  3. Ajoutez un sfx à la sortie du niveau.

  4. Ajoutez un sfx de mort à Player.

Background Music

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

  2. Ajoutez une composante Audio Source au Game Object.

  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.

  4. Vous pouvez maintenant faire un commit fin du tutoriel 8.