I. Introduction▲
Le projet présenté dans cette série est tout aussi bien compatible avec Unity 4.6 qu'avec Unity 5.
Vous pouvez retrouver les autres épisodes de cette série dans le sommaire dédié.
II. Vidéo▲
Unity - Roguelike 2D - Audio
III. Résumé▲
Dans ce chapitre, nous rajoutons les sons et les musiques afin de compléter notre jeu.
III-A. Sons▲
Sachant que notre jeu est en 2D, tous les sons vont être joués à partir du gestionnaire de sons.
Vous pouvez le créer en ajoutant un nouvel objet vide. À celui-ci, ajoutez deux sources audio, la première pour les effets sonores, la seconde pour la musique.
III-B. SoundManager.cs▲
Le script permet de jouer des sons, choisis aléatoirement dans une liste, avec une hauteur aléatoire afin de casser la monotonie. Comme pour le gestionnaire de jeu, ce script est un Singleton.
Le mot clé params, utilisé dans la fonction RandomizeSfx, permet de passer plusieurs paramètres à la fonction (séparés par des ',') qui seront regroupés en un tableau de ces paramètres.
III-B-1. Script▲
using UnityEngine;
using System.Collections;
namespace Completed
{
public class SoundManager : MonoBehaviour
{
public AudioSource efxSource; // Symbolise une référence vers la source audio qui jouera les effets sonores.
public AudioSource musicSource; // Symbolise une référence vers la source audio qui jouera les musiques.
public static SoundManager instance = null; // Permet aux autres scripts d'appeler les fonctions de SoundManager.
public float lowPitchRange = .95f; // Borne minimale pour la hauteur aléatoire des effets sonores.
public float highPitchRange = 1.05f; // Borne maximale pour la hauteur aléatoire des effets sonores.
void Awake ()
{
// Vérifie s'il y a déjà une instance de SoundManager
if (instance == null)
// si ce n'est pas le cas, la définir à celle-ci.
instance = this;
// Si l'instance existe déjà :
else if (instance != this)
// Détruit celle-ci, faisant qu'il ne peux y avoir qu'une seule et unique instance de SoundManager.
Destroy (gameObject);
// Définit le SoundManager à DontDestroyOnLoad pour qu'il ne soit pas détruit lors du rechargement de la scène.
DontDestroyOnLoad (gameObject);
}
// Permet de jouer un unique morceau sonore.
public void PlaySingle(AudioClip clip)
{
// Définit le clip de notre source sonore au clip passé en paramètre.
efxSource.clip = clip;
// Joue le clip.
efxSource.Play ();
}
// La fonction RandomizeSfx choisit aléatoirement un clip audio et change légèrement sa hauteur.
public void RandomizeSfx (params AudioClip[] clips)
{
// Génère un nombre entre 0 et la taille du tableau de clips passé en paramètre.
int randomIndex = Random.Range(0, clips.Length);
// Choisit une hauteur aléatoire entre les bornes définies pour jouer notre clip.
float randomPitch = Random.Range(lowPitchRange, highPitchRange);
// Définit la hauteur de la source audio avec celle choisie aléatoirement.
efxSource.pitch = randomPitch;
// Définit le clip avec celui choisi aléatoirement.
efxSource.clip = clips[randomIndex];
// Joue le clip.
efxSource.Play();
}
}
}III-B-2. Mise en place▲
Associez le script à votre gestionnaire de jeu « SoundManager ». Ensuite, définissez les références vers les sources audio avec les composants adéquats du gestionnaire.
Pour la source audio dédiée à la musique, choisissez la musique « scavengers_music » comme clip et cochez l'option de bouclage « Loop ».
Pour la source audio des effets sonores, décochez « Play On Awake ».
Finalement, éditez le script du joueur afin d'appeler les fonctions du gestionnaire de sons pour jouer les effets sonores en adéquation avec les actions du joueur. Notez que la musique est arrêtée lorsque le joueur perd la partie.
Faites de même pour le script des ennemies afin qu'un son soit jouer lorsqu'un ennemi attaque et de même pour le script des murs, afin de jouer un son de destruction du mur.
IV. Ressources▲
Vous pouvez télécharger les ressources pour ce projet sur l'Asset Store de Unity.
V. Commenter▲
Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.




