Mon application joue des AudioClips en ressource mais permet aussi à l'utilisateur de placer des sons dans un dossier local pour qu'ils soient joués à la place.
Code : Tout sélectionner
public class AudioManager : MonoBehaviour
{
// User sounds
Dictionary<string, AudioClip> UserSoundFiles = new Dictionary<string, AudioClip>();
private string SoudFolderPath;
void Start()
{
SoundFolderPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Application.dataPath), @"Sounds\"));
LoadUserSoundFiles();
}
private void LoadUserSoundFiles()
{
UserSoundFiles.Add("Panel_Open.wav", null);
UserSoundFiles.Add("Panel_Close.wav", null);
foreach (KeyValuePair<string, AudioClip> kvp in UserSoundFiles)
{
if (File.Exists(SoundFolderPath + kvp.Key))
{
StartCoroutine(GetAudioClip(kvp.Key));
}
}
}
IEnumerator GetAudioClip(string key)
{
using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(SoundFolderPath + key, AudioType.WAV))
{
yield return www.SendWebRequest();
if (www.isHttpError || www.isNetworkError)
{
}
else
{
AudioClip ac = DownloadHandlerAudioClip.GetContent(www);
UserSoundFiles[key] = ac;
}
}
}
public void playPanelOpen()
{
if (UserSoundFiles["Panel_Open.wav"] != null)
{
UIsounds.PlayOneShot(UserSoundFiles["Panel_Open.wav"]);
return;
}
UIsounds.PlayOneShot(Resource_Panel_Open);
}
public void playPanelClose()
{
if (UserSoundFiles["Panel_Close.wav"] != null)
{
UIsounds.PlayOneShot(UserSoundFiles["Panel_Close.wav"]);
return;
}
UIsounds.PlayOneShot(Resource_Panel_Close);
}
}
...mais je voulais savoir ce qui se passerait avec un 'mauvais' fichier .wav! J'ai donc créé un fichier texte 'Panel_Open.text' que j'ai renommé en 'Panel_Open.wav' pour voir ce qui allait se passer.
Il apparait alors que Unity soulève en effet l'erreur suivante:
Code : Tout sélectionner
Error: Cannot create FMOD::Sound instance for resource 0x0000000004BB7350: C:\Users\...\Desktop\Unity\Data\Sounds\Select.wav, (Unsupported file or audio format. )
UnityEngine.Networking.DownloadHandlerAudioClip:GetContent(UnityWebRequest)
La question est la suivante: comment pourrais-je capturer l'erreur de DownloadHandlerAudioClip.GetContent(www) et faire passer l'AudioClip à 'null' alors?
D'avance, merci!