Jump to content
Unity Insider Forum

AUDIO steuern nach Sitiation


rotbartdesign.berlin

Recommended Posts

Hallo

 

"einfache" Sache:

Ich habe drei Gamemodes für den Player

A, B und C

jeder Status soll eine eigene Mukke haben also einen Audioclip.

 

ich habe mir drei voids gemacht, hier eine davon:

 

public void AUDIO_normal()
{
 if(GameStatic.status == GameStatic.GameModus.NormalMode)
 {
  audio.clip = BaseAudio;
  audio.Play();
  audio.loop = true;
 }
}

 

und so WOLLTE ich sie steuern:

 

 

if(Input.GetKey(KeyCode.Alpha1))
 {
  if(GameStatic.status != GameStatic.GameModus.NormalMode)
  {

   GameStatic.status = GameStatic.GameModus.NormalMode;
   if(GameStatic.status == GameStatic.GameModus.NormalMode)
   {
 AUDIO_normal();
   }
  }

 }
 if(Input.GetKey(KeyCode.Alpha2))
 {
  if(GameStatic.status != GameStatic.GameModus.MeleeMode)
  {
   GameStatic.status = GameStatic.GameModus.MeleeMode;
   if(GameStatic.status == GameStatic.GameModus.MeleeMode)
   {
 AUDIO_melee();
   }
  }

 }
 if(Input.GetKeyUp(KeyCode.Alpha3))
 {
  if(GameStatic.status != GameStatic.GameModus.DistanceMode)
  {
   GameStatic.status = GameStatic.GameModus.DistanceMode;

  }
  if(GameStatic.status == GameStatic.GameModus.DistanceMode)
   {
 AUDIO_distance();

 

Wie so oft: GEHT NICHT

 

Suche nun nach einer einfachen schnellen Lösung die Sounds wiederzugeben bei Statuswechsel...

weils schon so drinsteckt vielleicht mit switch Case lösen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Boah! Was machst du denn da?

Du fragst ab ob der Status nicht normalMode ist. Ist das der Fall, setzt du den Status auf normalMode.

Nur um jetzt nochmal abzufragen ob der Status denn nun auch wirklich normalMode ist. Da dem so ist (haste ja eben erst so gesetzt) springst du in eine Void und fragst das Gleiche nochmla ab???

JungeJunge! Du traust scheinbar nix und niemanden! :D

 

EInmal abfragen und evtl. setzen schicket ja wohl.

Außerdem ist ne Void, aus der nur von einer Abfrage her reingesprungen wird unsinnig.

Da kannste auch gleich den Code in deine Abfrage mit rein tun.

 

Und damit du nicht ständig die Abfrage ausführst, wenn du die Taste drückst, solltest du die Tastenabfrage und den Status zusammenabfragen.

Nur wenn Taste xy gedrückt und der Status nicht so und so ist, dann setze den Status auf so und so und starte einmalig den Sound.

 

if(Input.GetKey(KeyCode.Alpha1) && GameStatic.status != GameStatic.GameModus.NormalMode){
  GameStatic.status = GameStatic.GameModus.NormalMode;
  audio.clip = BaseAudio;
  audio.Play();
  audio.loop = true;
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

negativ Sir!

die doppelten Sachen seh ich ein.

Aber zum Beispiel in Peteys gängigen und bekannten Tuts zu Hack and Slash (Burg Zerg Arcade)

werden sehr sehr häufig leere Voids geschrieben weil es für den einen oder anderen einfach sauberer ist bla bla...

 

Und nein das war schon bedingt absicht:

der Status ändert sich nur bei Tastendruck, daher setz ich ihn da gleich auch.

Die != Abfrage sollte nur den Status setzen wenn er nicht aktiv ist damit ich durchschalten kann...

 

whatever.

 

Das ganze schaltet jedenfalls die Statis durch aber spielt dennoch die Mukke nich ab

ich teste nochmal Deinen Tip...

UPDATE ==> Mission failed:

 

 

if(Input.GetKey(KeyCode.Alpha1) && GameStatic.status != GameStatic.GameModus.NormalMode)
  {
   GameStatic.status = GameStatic.GameModus.NormalMode;
   audio.clip = NormalModeAudio;
   audio.Play();
   audio.loop = true;
  }

  if(Input.GetKey(KeyCode.Alpha2) && GameStatic.status != GameStatic.GameModus.MeleeMode)
  {
   GameStatic.status = GameStatic.GameModus.MeleeMode;
   audio.clip = MeleeModeAudio;
   audio.Play();
   audio.loop = true;
  }
  if(Input.GetKey(KeyCode.Alpha3) && GameStatic.status != GameStatic.GameModus.DistanceMode)
  {
   GameStatic.status = GameStatic.GameModus.DistanceMode;
  audio.clip = DistanceModeAudio;
   audio.Play();
   audio.loop = true;
  }

 

die Statis schalten durch

die Mukke spielt nichtmehr ab...

 

nochn Update

 

meine Abfrage war richtig weil es nach der Schreibweise ja sagt => bla bla && wenn != Statusx is => status anmachen und sound spielen.

man MU? hier nochmal fragen ob das auch nun so ist...

in diesem Sonderfall scheint man ohne definierte Statis nicht drumrum zu kommen

 

anderer Ansatz möglich? Die Statis vorher klar definieren?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Na siehste. :)

Das was du da mit den Stati machst, kann ich von hier ja nicht sehen. Wäre es eine normale Variable gewesen hätte es auch ohne vorheriges setzen auf einen Status funktionieren müssen.

 

Ein Void wegen der übersicht zu erstellen, kann man machen, ist aber bei großen Scripts dann doch nicht mehr übersichtlich. Denn dann geht erstmal das Gesuche nach der Void los um zu sehen, was da denn überhaupt gemacht wird, wenn mal ein Fehler aufgetreten ist.

Ich persönlich sehe eine Unterfunktion eigentlich als Codeersparnis an. Wenn ich also bei mehreren Bedingungen immer das Gleiche ausführen will, springe ich von diesen Abfrage in die Funktion rein. Ich teile also den Code mit anderen Abfragen und brauch ihn nur einmal schreiben. Genauo nutze ich das um große Funktionen vom Code zu trennen. Aber bei 3 Zeilen, die nur von einer Seite her bearbeitet werden, mache ich das nicht.

Da mach ich das doch eher so, dass ich extra Scripte nutze. Also in deinem Fall ein Soundscript, wo ich dann in eine Funktion rein springe oder was sich selber organisiert, wenn sich eine Static Var irgendwo ändert. WIe gesagt. Ist meine persönliche Herangehensweise. Ich scripte auch alleine und brauch den Code deswegen nicht modular aufbauen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...