Jump to content
Unity Insider Forum

Sound spielt nicht bei Aufruf durch Array


Wilma Wunderlich

Recommended Posts

Hallo Community, ich habe in einem Array unter anderem den Namen einer ".wav" Datei. Diese Datei soll beim Klick auf einen Button abgespielt werden.

Das funktioniert auch wenn ich den Pfad direkt angebe:
DasSoundfile = Resources.Load("sound/1") as AudioClip;
DasSoundObjekt.clip = DasSoundfile;
DasSoundObjekt.Play();


Aber über den Aufruf mit dem Array funktioniert es nicht:
DasSoundfile = Resources.Load(mySound[5]) as AudioClip;
DasSoundObjekt.clip = DasSoundfile;
DasSoundObjekt.Play();

Dies funktioniert auch:
DasSoundfile = Resources.Load("sound/1", typeof(AudioClip)) as AudioClip;
Das wiederum nicht:
DasSoundfile = Resources.Load(mySound[5], typeof(AudioClip)) as AudioClip;

Da liegt natürlich die Vermutung nahe das im Array nichts oder nicht das richtige steht. Aber da ist der richtige Wert drin!? Im Log.Fenster habe ich geprüft das im Array der richtige Wert steht.
Debug.Log(mySound[5]); -> Ausgabe: sound/1
Also eigentlich alles ok - aber es wird nicht abgespielt. (Es haben sich auch auch keine Leerzeichen in das Array geschlichen)

Das Array ist vom Typ String. "DasSoundfile" ist im Skript als Audioclip und "DasSoundObjekt" als Audiosource deklariert. Die Sound Datei liegt im Ordner "Resources/sound".

Hoffentlich könnt ihr mir helfen, ich verzweifel da echt langsam dran.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sollte eigentlich funktionieren, sieht alles gut aus.

Aber bevor du weiter verzweifelst: Gibt's einen bestimmten Grund, warum du Resources.Load benutzt?

In der Regel ist es viel einfacher und völlig in Ordnung, einfach direkt den AudioClip zu referenzieren.

public AudioClip[] clips;
audioSource.clip = clips[5];
audioSource.Play();

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Sascha, danke für deine Antwort. Das hatte ich bisher nicht als Lösungsansatz herangezogen weil die Daten aus einer Textdatei in das Array geladen werden und es sich bei den Daten immer um jeweils 5 Textdaten für Textobjekte und Buttonbeschriftungen und eben dem zugehörigen Dateinamen für den abzuspielenden Sound handelt. Also nur jeder 6. Eintrag im Array ist ein zu verwendender Dateiname. ( mySound[5] ist also der 1. Eintrag mit Dateinamen 0 - 4 ist Text)

Aber ich werde die Dateinamen dann wohl besser in eine Extra-Datei "outsourcen" und dann die direkte Referenzierung als Audioclip vornehmen. Ich werde das die Tage in Angriff nehmen und gebe dann mal Rückmeldung ob es geklappt hat. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Pack das Ganze mal in einen String bevor du es übergibst. Zudem könnten auch noch "Whitespaces" enthalten sein, die du nicht sehen kannst. Oft handelt es sich hier um /r und /n.

string fileName = mySound[5]; // Hier könnten noch Whitespaces enthalten wie /r oder /n (0D 0A)
                              
print(fileName); // Mal die Länge des Strings ausgeben, sollte 7 ergeben
DasSoundfile = Resources.Load(fileName, typeof(AudioClip)) as AudioClip;

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

OMG! Danke!

Mit print(fileName); habe ich kein Ergebnis bekommen aber mit: Debug.Log(mySound[5].Length); hat sich deine Vermutung bestätigt -  es hatte sich  ein Whitespace in der Variable versteckt.

Dieses habe ich mit:

mySound[5] = string.Join("", mySound[5].Split(default(string[]), StringSplitOptions.RemoveEmptyEntries));

entfernt und alles ist fein. :)

Dumm von mir das ich nicht gleich geschrieben habe das die Daten aus einer Textdatei kommen, dann wäre Sascha bestimmt auch auf die Idee gekommen. Vielen Dank an euch beide - nun kann das Projekt endlich weitergehen. Juhu! :D

btw - gibt es für Postings gar keine "Vorschau" Funktion im - oder finde ich die nur nicht? :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...