2016-05-22 12 views
1

Ich bin mit Unity für einen Auftrag beschäftigt und habe eine "Damage Chain" erstellt, bei der ich, wenn ich schnell genug schiebe, die Schadenskette erhöht.Unity: Survival Shooter Tutorial: Wie man zwischen zwei Hintergrundsongs umschaltet

Dann, wenn der Schaden Kette hoch genug bekommt, wollte ich von der Hintergrundmusik wechseln „Enter Sandman“ von Metallica ...

Aber wenn ich hinzufügen, die „Enter Sandman“ MP3 zum Hintergrundmusik Objekt in der Hierarchie, ich muss eine zweite "Audio Source", mit dem gleichen Namen (dh Audio Source) hinzufügen.

Dann, wenn ich versuche, es in den Code zu verwalten, kann ich nicht einfach GetComponent<AudioClip> wie ich anderswo laufen lassen.


Wie kann ich zwischen den beiden Songs in einem Skript wechseln? Hier ist ein Bild von meinem Objekt Set-up, dann ist der Code ...

enter image description here

Und mein Code (wie es ist), die SongManager:

using UnityEngine; 
using System.Collections; 

public class SongManager : MonoBehaviour { 
    AudioSource regular_music; 
    AudioSource high_dmg_music; 
    // Use this for initialization 
    void Start() { 
     regular_music = GetComponent<AudioSource>(); 
     high_dmg_music = GetComponent<AudioSource>(); 

     regular_music.loop = true; 
     regular_music.Play(); 

     high_dmg_music.loop = false; 
     high_dmg_music.Stop(); 
    } 

    // Update is called once per frame 
    void Update() { 
     if (DamageManager.dmg_chain > 1500) { 
      regular_music.loop = false; 
      high_dmg_music.loop = true; 
      high_dmg_music.Play(); 
     } else { 
      if (high_dmg_music.isPlaying) { 
       high_dmg_music.loop = false; 
       high_dmg_music.Stop(); 
       regular_music.loop = true; 
       regular_music.Play(); 
      } 
     } 

    } 
} 

Offensichtlich ist der Code funktioniert nicht, aber ich habe es trotzdem beendet.

Wie würde ich diese Konfiguration implementieren?

+2

Ich wollte nur wissen, wie streitlustig Metallica ist. Sie möchten diesen Song wahrscheinlich nicht in einer endgültigen Version verwenden. – bodangly

+0

Haha, guter Punkt; Ich benutze für eine Aufgabe. Ich könnte zu einem anderen Lied wechseln. Ich änderte die Spawnrate auf eine Zehntelsekunde, machte eine gigantische Waffe, die 1000 Mal pro Sekunde schießt ... – bordeo

Antwort

2

Erstellen Sie nur eine AudioSource. Erstellen Sie viele AudioClips und weisen Sie dann alle AudioClip, die Sie wiedergeben möchten, erneut an die AudioSource. Ziehen Sie die Sounds in die AudioClip Slots.

public AudioClip background_music; 
public AudioClip sandman_music; 

private AudioSource audioSource; 

Void Start() 
{ 
    audioSource = GetComponent<AudioSource>(); 

    //To play backround sound 
    if (audioSource.isPlaying) 
    { 
      audioSource.Stop(); 
    } 
    audioSource.clip = background_music; 
    audioSource.Play(); 

    //To play sandman sound 
    if (audioSource.isPlaying) 
    { 
    audioSource.Stop(); 
    } 
    audioSource.clip = sandman_music; 
    audioSource.Play(); 
} 
+0

Ok ... also habe ich den AudioClip-Slot in der Audio Source-Komponente in der GUI gezogen ... aber es scheint nur ein Lied zu speichern. Wie kann ich die AudioClips "kennen"/die Clips im Skript abrufen? (sehr neu in diesem - wie in, beendete das Tutorial gestern ...) – bordeo

+0

@bordeo Nein. Ziehen Sie die Hintergrundmusik-Sound-Datei in Ihrem Projekt in den Hintergrundmusik-Slot und die 45-Enter Sandman-Datei in den Sandman_music. Das ist es. – Programmer

+1

Ehrfürchtig, habe es gerade herausgefunden. Vielen Dank – bordeo

1

Sie müssen den Clip der Audioquelle ändern. http://docs.unity3d.com/ScriptReference/AudioSource.html

Sie könnten es tun wollen, wie so (so dass Sie Ihre Musik in Inspektor festgelegt werden kann):

public AudioClip regular_music; 
    public AudioClip high_dmg_music; 

Und dann setzen gerade Audiosource des Clips zu einem der theese.

+0

Ah, ok. Also muss ich den AudioClip irgendwie separat hinzufügen? – bordeo

+0

Nein, ziehe einfach die Songs von deinen Assets in die Slots deines Skripts –

+0

AHH! Jeeze. Ich hatte keine Ahnung, dass du das kannst. Sehr cool. – bordeo

Verwandte Themen