Jump to content
Unity Insider Forum
Sign in to follow this  
DerStefan

Zufällige Audio-Datei aus Liste abspielen

Recommended Posts

Hallo,

ich habe 2 Images, welche ich mit einer Button-Komponente und einer Audiosource-Komponente ausgestattet habe.
Ziel ist, dass beide Images zufällige Sounddateien abspielen, die sich in verschiedenen Arrays/Listen befinden.

Die Variante für das Gegnerteam funktioniert einwandfrei, allerdings möchte ich nicht zwingend die Audiodateien in den Inspector reinziehen müssen.
Aus diesem Grund bevorzuge ich die erste Variante (ClickSoundTeam), welche aber leider nicht funktioniert.
"PlayOneShot was called with a null AudioClip."

Kann mir bitte jemand sagen, warum es nicht funktioniert?
Die Button-Komponenten greifen auf die korrekten Funktionen zu (mittels OnClick() im Inspector)

Die wav-Dateien befinden sich im Ordner "Assets\Resources\Sounds".
Ich hatte sie auch in "Assets\Sounds" gepackt und es sowohl mit als auch ohne Dateiendung versucht - gleiches Ergebnis.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
	public class SoundPlay : MonoBehaviour
{
  private AudioSource audioSource;
  private AudioClip[] teamSoundList;
  public AudioClip[] opponentArray;
	  public void ClickSoundTeam()
  {
    audioSource = GetComponent<AudioSource>();
    teamSoundList = new AudioClip[]{(AudioClip)Resources.Load("Sounds/000.wav"),
                                     (AudioClip)Resources.Load("Sounds/001.wav"),
                                     (AudioClip)Resources.Load("Sounds/002"),
                                     (AudioClip)Resources.Load("Sounds/003"),
                                     (AudioClip)Resources.Load("Sounds/004"),
                                     (AudioClip)Resources.Load("Sounds/005")};
    audioSource.clip = teamSoundList[Random.Range(0, teamSoundList.Length)];
    audioSource.PlayOneShot(audioSource.clip); // FUNKTIONIERT NICHT!
  }
  public void ClickSoundOpponent()
  {
    audioSource = GetComponent<AudioSource>();
    audioSource.clip = opponentArray[Random.Range(0, opponentArray.Length)];
    audioSource.PlayOneShot(audioSource.clip); // FUNKTIONIERT!
  }
}

Vielen Dank für jede Hilfe und beste Grüße!

Share this post


Link to post
Share on other sites

Das ist halt so der Grund, warum Resources.Load kacke ist. Der Compiler kann dir nicht mehr helfen und du musst rumprobieren, wo nun das Problem ist. Mal davon abgesehen, dass du die immer wieder neu lädst und nicht entlädst.

Die Dateiendung lässt du auf jeden Fall weg. Der Pfad stimmt auch (sofern du von einem Ordner in deiner Project View redest). Die Sounds 002 bis 005 sollte daher funktionieren, wenn die Dateien 002.wav usw. heißen. Theoretisch hast du ja aber ne 2/3-Chance, dass dein Code funktioniert. Wenn der Fehler immer auftritt, dann ist das Problem evtl. doch woanders.

  • Like 1

Share this post


Link to post
Share on other sites

Besser wenn du hier die generische Typ-Parameterversion der Funktion verwendest:

new AudioClip[]{Resources.Load<AudioClip>("Sounds/000"), Resources.Load<AudioClip>("Sounds/001") ...

 

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...