Jump to content
Unity Insider Forum

Sound während Pause bzw. timeScale


F1R3ON

Recommended Posts

Liebe Community,

ich hab ein Problem mit Soundeffekten, wie z.b das Drücken eines Buttons.

Mein Sound wird nicht abgespielt, ich schätze es liegt an Time.timeScale = 1 im Pausen-Menü.

Wie kann man während man die Zeit in Unity stoppt, Sound abspielen, hat da jemand einen Lösungsansatz, bitte :/?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Ausführung von Skripten wird gestoppt, wenn man timeScale auf 0 setzt. Es werden nur die Audiosources abgespielt, die bereits in der Szene vorhanden sind. Ansonsten kann man es wohl so machen:

Time.timeScale = 1;
audio.PlayClipAtPoint(sfx.soundTest, Camera.main.transform.position, 1.0 ); 
Time.timeScale = 0;

d.h. wenn man eine neue AudioSource erzeugt, muss man den timeScale kurz wieder "einschalten".

Ansonsten eben prüfen, ob beim Drücken des Button, die Audiosource abgespielt wird. Wenn hier Code fürs Abspielen einer AS aufgerufen wird, dann wird dieser bei timeScale 0 nicht aufgeführt.
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Stunden schrieb Zer0Cool:

Die Ausführung von Skripten wird gestoppt, wenn man timeScale auf 0 setzt.

vor 4 Stunden schrieb Zer0Cool:

Wenn hier Code fürs Abspielen einer AS aufgerufen wird, dann wird dieser bei timeScale 0 nicht aufgeführt.

Äh wat?

Scripts laufen ganz normal weiter, wenn Time.timeScale == 0 ist.

Und das Abspielen von Sounds geht auch wunderbar. Daran liegt's also nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, stimmt, kommt mir nur so vor, da ich mittlerweile überall timeScale drin hab und damit sich nix mehr tut im Game, wenn ich es auf 0 setze ;D
Aber das es den Sound nicht beeinflusst stimmt nicht, hatte da auch schon Soundverzerrungen beim Setzen von timeScale, frag mich aber nicht wie da der Zusammenhang ist. Vermutlich eine bestimmte Konstellation.

Aber ich habe mal ein paar Tests gemacht in Unity 2017 bekomme ich auch keinen Effekt mehr auf eine Audiosource über Time.timeScale.

Was hast du denn da für Buttons? Wie sind die erstellt? Wie spielen sie einen Sound ab?
Normalerweise wird einem UI-Button im "On Click" - Bereich ein Event hinzugefügt.
Dieses Event bekommt dann das GameObjekt zugewiesen welchen die AudioSource trägt.  Dann wird eine Methode übergeben, entweder "Play" (spielt den Clip ab, den der Audiosource zugewiesen wurde) oder "PlayOneShoot(clip)".

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also das mit Time.timeScale = 0 und 1 passt ja alles wegen der Zeit zum stoppen und weiterlaufen zu lassen.

Ich hab das ganze mit Unity 2017 so geregelt das ich ein GameObject in der Root-Hierachie erstellt habe mit dem Namen Sound und ein AudioSource hinzugefügt habe. (Button)

Beim Button selbst OnClick AudioSource -> Objekt ausgewählt und fertig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb F1R3ON:

Also das mit Time.timeScale = 0 und 1 passt ja alles wegen der Zeit zum stoppen und weiterlaufen zu lassen.

Ich hab das ganze mit Unity 2017 so geregelt das ich ein GameObject in der Root-Hierachie erstellt habe mit dem Namen Sound und ein AudioSource hinzugefügt habe. (Button)

Beim Button selbst OnClick AudioSource -> Objekt ausgewählt und fertig.

Ist eigentlich korrekt und bei mir hat das Setzen des TimeScale keine Auswirkung auf den Sound den Buttons, ob ich die da 1 oder 0 einstelle ändert am Verhalten des Buttons nichts. Mach doch mal selbst ein Test in einer leeren Szene mit einem Button und dann setzt du den TimeScale per Skript.

using UnityEngine;
using System.Collections;

public class TimeScaleTest : MonoBehaviour {
    void Update() {
        if (Input.GetKeyDown(KeyCode.F1)) {
            print("Time.timeScale 0");
            Time.timeScale = 0;
        }

        if (Input.GetKeyDown(KeyCode.F2)) {
            print("Time.timeScale 1");
            Time.timeScale = 1;
        }
        
    }
}

Häng dieses Skript an ein leeres GameObjekt und dann drück "F1" oder "F2".

Vermutlich hast du ein anderes Problem. Versetz dein Game mal in den Pause-Modus und stoppe das Game. Dann schau dir das GameObjekt in der Szeneview einmal an, welches die Audiosource trägt, ob es aktiv ist und ob der Audioclip gesetzt ist, ebenfalls die Lautstärke.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab ich doch schon erwähnt, worin der Fehler lag :)

Zitat

Ich hab das ganze mit Unity 2017 so geregelt das ich ein GameObject in der Root-Hierachie erstellt habe mit dem Namen Sound und ein AudioSource hinzugefügt habe. Dann habe ich beim Button beim OnClick-Event das GameObject "Sound" ausgewählt.

Außer Ihr könnt mir einen besseren Vorschlag geben wie man Sounds in seine Gameobjekte einbaut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ach so. Hast also nichts anderes mehr gemacht nachdem Zer0Cool geantwortet hatte.
Trotzalledem kannst du auch genauso in der Methode, in die du durch den Button rein springst, irgendeine Audiosource steuern. Denn wie gesagt, auch bei Timescale 0 wird alles noch im Code ausgeührt. Nur das, was mit ner Zeit versehen ist, also gerne mal ne Bewegung oder Animation, tut nichts, wenn die Zeit auf 0 steht. (Außer wenn du die RealTime nutzt)
Bei Dingen, die du mit dem Animator steuerst, kannst du übrigens auch beim UpdateMode auf Unscaled Time umstellen. Dann gehen z.B. auch die Animationen der Buttons, wenn du im Pause Modus bist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...