Unity3d da turli sahnalar uchun orqa fonda o'ynash bilan bog'liq

Mening o'yinimda ikkita sahna bor. Men erishmoqchi bo'lgan narsa, agar foydalanuvchi bir sahnadan boshqasiga navigatsiya qilsa, har biriga xos fon ovozi boshidan eshitilishi kerak (audio uzunligi = 0)

Ammo barcha sa'y-harakatlarim behuda.

AudioSound usulini "pauza" usulidan foydalanib qoldim Men harakat qildim     yangi o'yin ob'ektini yarating va unga bu sahna orqa fonini belgilang va o'ynang     yo'q bo'lsa, yana bir sahna uchun yaratilgan GameObjectni yo'q qilish

Lekin bu men istagan natija bermaydi.

Audio Clipni qanday boshlashni qidirishni boshladim va boshqa audio kassalarni o'ynatishni to'xtatdim, ammo hech qanday topmadim.

Men bilaman, men sizlarga to'ldiradigan kodni so'rashi kerak emas, lekin kimdir buni amalga oshirgan bo'lsa yoki unga ba'zi bir pseudo kod so'rovini bergan bo'lsa

0
Faqatgina "Uyg'oning" da o'ynang, ularga tegishli klip bilan audio manbaiga ega bo'lgan har bir sahnada GameObjects haqida nima deyish mumkin? Bu yerda eng oson noto'g'ri echim bu - agar siz kodni talab qilsangiz, bizga bu qanday murojaat qilganingizni ko'rsatishingiz va o'zingiz istagan ishlamaydigan qismlarni ko'rsatishingiz kerak. Aks holda, bizda hech qanday kontekst yo'q va siz qanday qilib hozirda hal qilmoqchi bo'lganingizni bilmay qolasiz.
qo'shib qo'ydi muallif Serlite, manba
Faqatgina "Uyg'oning" da o'ynang, ularga tegishli klip bilan audio manbaiga ega bo'lgan har bir sahnada GameObjects haqida nima deyish mumkin? Bu yerda eng oson noto'g'ri echim bu - agar siz kodni talab qilsangiz, bizga bu qanday murojaat qilganingizni ko'rsatishingiz va o'zingiz istagan ishlamaydigan qismlarni ko'rsatishingiz kerak. Aks holda, bizda hech qanday kontekst yo'q va siz qanday qilib hozirda hal qilmoqchi bo'lganingizni bilmay qolasiz.
qo'shib qo'ydi muallif Serlite, manba

6 javoblar

Agar batafsil kodni qidirsangiz, siz ushbu kodni sinab ko'rishingiz mumkin.

Birinchisi: skript yozing "SoundFxScript.cs" //Siz xohlagan tarzda o'zgartirishingiz mumkin

Ushbu kodni kiriting:

public class SoundFxScript : MonoBehaviour {
    //Background Music

    public AudioSource Scene1_Sound;
    public AudioSource Scene2_Sound;

   //Use this for initialization
    void Start() {
        PlayBackgroundMusic ();
    }

   //Update is called once per frame
    void Update() {

    }

    public void PlayBackgroundMusic() {
        if (UnityEngine.SceneManagement.SceneManager.GetActiveScene ().name == "Scene1") {
            Scene1_SoundPlay();
        } else if (UnityEngine.SceneManagement.SceneManager.GetActiveScene ().name == "Scene2") {
            Scene2_SoundPlay();
        } 
    }

    public void Scene1_SoundPlay() {
        Scene1_Sound.Play ();
        Scene2_Sound.Stop ();
    }

    public void Scene2_SoundPlay() {
        Scene1_Sound.Stop ();
        Scene2_Sound.Play ();
    }


// Step Fifth
public void LoadTheScene (string Scenename) {
            UnityEngine.SceneManagement.SceneManager.LoadScene (Scenename);
            sf.PlayBackgroundMusic ();

        }
}

Ikkinchidan, birinchi sahnada Gameobject nomi = "SoundMusic" qiling va SoundFxScript.cs komponentining skriptini qo'shing. Gameobject "SoundMusic" da sizga sahna1 va sahna2 uchun fon musiqasini qo'shishingiz mumkin.

Third : Make a singleton file Singleton.cs

Ushbu kodni kiriting:

public class Singleton : MonoBehaviour {
    static Singleton instance = null;

    void Start ()
    {
        if (instance != null)
        {
            Destroy(gameObject);
            return;
        }

        DontDestroyOnLoad(gameObject);
        instance = this;
    }

}

Fourth : at gameobject "SoundMusic" add component script "Singleton.cs"

Fifth : How To Call In Another Scene (Load Scene). This method is inside SoundFxScript.cs

Misol Yuklab olish joyini chaqirish uchun bir usul bor. Ushbu usulni sinab ko'ring:

Buni quyidagicha qo'ng'iroq qiling: LoadTheScene ("Scene2") //Call2 oynasi

Bu yerda o'zingizning SoundFxscript.cs komponentini sizda mavjud bo'lgan har qanday skriptdan izlashingiz mumkin.

Misol:

SoundFxScript sf;
sf = GameObject.Find ("SoundMusic").GetComponent ();

Yangi sahnani o'rnatish uchun LoadTheScene usulini ishlatishingiz mumkin va fon musiqasi Scene-ning qaysi versiyasiga qarab yana qayta ishlatiladi.

Hammasi shu.

0
qo'shib qo'ydi
1) Sizning yechingiz O'S ni ishlatishdan tashqariga chiqadi, buning hech qanday ehtiyoji yo'q. 2) Siz ko'plab keraksiz kodlardan foydalanmoqdasiz: singleton bu erda foydasiz (bizga lazy init kerak emas, faqat DontDestroyOnLoad bilan birinchi sahnada o'yin ob'ekti kerak), kod sahna o'zgarishi maqbul emas (siz skriptlarda ishlatish uchun qulay bo'lgan sceneLoaded hodisasini ishlatmaysiz). 3) Data strukturasi yaxshi emas, yoki barcha kodni saqlash uchun AudioClip [] dan foydalaning va faqat bitta AudioSource ish vaqtida muvofiq klip bilan yuklangan.
qo'shib qo'ydi muallif Galandil, manba

Agar batafsil kodni qidirsangiz, siz ushbu kodni sinab ko'rishingiz mumkin.

Birinchisi: skript yozing "SoundFxScript.cs" //Siz xohlagan tarzda o'zgartirishingiz mumkin

Ushbu kodni kiriting:

public class SoundFxScript : MonoBehaviour {
    //Background Music

    public AudioSource Scene1_Sound;
    public AudioSource Scene2_Sound;

   //Use this for initialization
    void Start() {
        PlayBackgroundMusic ();
    }

   //Update is called once per frame
    void Update() {

    }

    public void PlayBackgroundMusic() {
        if (UnityEngine.SceneManagement.SceneManager.GetActiveScene ().name == "Scene1") {
            Scene1_SoundPlay();
        } else if (UnityEngine.SceneManagement.SceneManager.GetActiveScene ().name == "Scene2") {
            Scene2_SoundPlay();
        } 
    }

    public void Scene1_SoundPlay() {
        Scene1_Sound.Play ();
        Scene2_Sound.Stop ();
    }

    public void Scene2_SoundPlay() {
        Scene1_Sound.Stop ();
        Scene2_Sound.Play ();
    }


// Step Fifth
public void LoadTheScene (string Scenename) {
            UnityEngine.SceneManagement.SceneManager.LoadScene (Scenename);
            sf.PlayBackgroundMusic ();

        }
}

Ikkinchidan, birinchi sahnada Gameobject nomi = "SoundMusic" qiling va SoundFxScript.cs komponentining skriptini qo'shing. Gameobject "SoundMusic" da sizga sahna1 va sahna2 uchun fon musiqasini qo'shishingiz mumkin.

Third : Make a singleton file Singleton.cs

Ushbu kodni kiriting:

public class Singleton : MonoBehaviour {
    static Singleton instance = null;

    void Start ()
    {
        if (instance != null)
        {
            Destroy(gameObject);
            return;
        }

        DontDestroyOnLoad(gameObject);
        instance = this;
    }

}

Fourth : at gameobject "SoundMusic" add component script "Singleton.cs"

Fifth : How To Call In Another Scene (Load Scene). This method is inside SoundFxScript.cs

Misol Yuklab olish joyini chaqirish uchun bir usul bor. Ushbu usulni sinab ko'ring:

Buni quyidagicha qo'ng'iroq qiling: LoadTheScene ("Scene2") //Call2 oynasi

Bu yerda o'zingizning SoundFxscript.cs komponentini sizda mavjud bo'lgan har qanday skriptdan izlashingiz mumkin.

Misol:

SoundFxScript sf;
sf = GameObject.Find ("SoundMusic").GetComponent ();

Yangi sahnani o'rnatish uchun LoadTheScene usulini ishlatishingiz mumkin va fon musiqasi Scene-ning qaysi versiyasiga qarab yana qayta ishlatiladi.

Hammasi shu.

0
qo'shib qo'ydi
1) Sizning yechingiz O'S ni ishlatishdan tashqariga chiqadi, buning hech qanday ehtiyoji yo'q. 2) Siz ko'plab keraksiz kodlardan foydalanmoqdasiz: singleton bu erda foydasiz (bizga lazy init kerak emas, faqat DontDestroyOnLoad bilan birinchi sahnada o'yin ob'ekti kerak), kod sahna o'zgarishi maqbul emas (siz skriptlarda ishlatish uchun qulay bo'lgan sceneLoaded hodisasini ishlatmaysiz). 3) Data strukturasi yaxshi emas, yoki barcha kodni saqlash uchun AudioClip [] dan foydalaning va faqat bitta AudioSource ish vaqtida muvofiq klip bilan yuklangan.
qo'shib qo'ydi muallif Galandil, manba

Agar batafsil kodni qidirsangiz, siz ushbu kodni sinab ko'rishingiz mumkin.

Birinchisi: skript yozing "SoundFxScript.cs" //Siz xohlagan tarzda o'zgartirishingiz mumkin

Ushbu kodni kiriting:

public class SoundFxScript : MonoBehaviour {
    //Background Music

    public AudioSource Scene1_Sound;
    public AudioSource Scene2_Sound;

   //Use this for initialization
    void Start() {
        PlayBackgroundMusic ();
    }

   //Update is called once per frame
    void Update() {

    }

    public void PlayBackgroundMusic() {
        if (UnityEngine.SceneManagement.SceneManager.GetActiveScene ().name == "Scene1") {
            Scene1_SoundPlay();
        } else if (UnityEngine.SceneManagement.SceneManager.GetActiveScene ().name == "Scene2") {
            Scene2_SoundPlay();
        } 
    }

    public void Scene1_SoundPlay() {
        Scene1_Sound.Play ();
        Scene2_Sound.Stop ();
    }

    public void Scene2_SoundPlay() {
        Scene1_Sound.Stop ();
        Scene2_Sound.Play ();
    }


// Step Fifth
public void LoadTheScene (string Scenename) {
            UnityEngine.SceneManagement.SceneManager.LoadScene (Scenename);
            sf.PlayBackgroundMusic ();

        }
}

Ikkinchidan, birinchi sahnada Gameobject nomi = "SoundMusic" qiling va SoundFxScript.cs komponentining skriptini qo'shing. Gameobject "SoundMusic" da sizga sahna1 va sahna2 uchun fon musiqasini qo'shishingiz mumkin.

Third : Make a singleton file Singleton.cs

Ushbu kodni kiriting:

public class Singleton : MonoBehaviour {
    static Singleton instance = null;

    void Start ()
    {
        if (instance != null)
        {
            Destroy(gameObject);
            return;
        }

        DontDestroyOnLoad(gameObject);
        instance = this;
    }

}

Fourth : at gameobject "SoundMusic" add component script "Singleton.cs"

Fifth : How To Call In Another Scene (Load Scene). This method is inside SoundFxScript.cs

Misol Yuklab olish joyini chaqirish uchun bir usul bor. Ushbu usulni sinab ko'ring:

Buni quyidagicha qo'ng'iroq qiling: LoadTheScene ("Scene2") //Call2 oynasi

Bu yerda o'zingizning SoundFxscript.cs komponentini sizda mavjud bo'lgan har qanday skriptdan izlashingiz mumkin.

Misol:

SoundFxScript sf;
sf = GameObject.Find ("SoundMusic").GetComponent ();

Yangi sahnani o'rnatish uchun LoadTheScene usulini ishlatishingiz mumkin va fon musiqasi Scene-ning qaysi versiyasiga qarab yana qayta ishlatiladi.

Hammasi shu.

0
qo'shib qo'ydi
1) Sizning yechingiz O'S ni ishlatishdan tashqariga chiqadi, buning hech qanday ehtiyoji yo'q. 2) Siz ko'plab keraksiz kodlardan foydalanmoqdasiz: singleton bu erda foydasiz (bizga lazy init kerak emas, faqat DontDestroyOnLoad bilan birinchi sahnada o'yin ob'ekti kerak), kod sahna o'zgarishi maqbul emas (siz skriptlarda ishlatish uchun qulay bo'lgan sceneLoaded hodisasini ishlatmaysiz). 3) Data strukturasi yaxshi emas, yoki barcha kodni saqlash uchun AudioClip [] dan foydalaning va faqat bitta AudioSource ish vaqtida muvofiq klip bilan yuklangan.
qo'shib qo'ydi muallif Galandil, manba

Men sizning savolingizni to'g'ri tushunganimga ishonchim komil emas, chunki fon musiqasi uchun eng oddiy senariy.

Agar har bir sahnada audioklipni almashtirishni xohlasangiz, A sahnasi A va B sahnesini B Klipini o'ynashi kerak va ikkala videoklip ham sahna yuklangandan so'ng o'ynalishi kerak, faqat o'yin ob'ektini yaratishingiz kerak Ovoz manbai komponenti bilan ikkala sahnada, "Uyg'oning ustiga o'ynang" bayrog'i bilan faollashtiriladi va so'ngra sahna uchun mos klipni belgilang (ya'ni, "A" o'yin ob'ektining Ovoz manbai komponentining Audio clip sohasida Audio A klipini tayinlang va Sahna B uchun B B bilan ham xuddi shunday qiling.

Bu juda ko'p.

0
qo'shib qo'ydi

Men sizning savolingizni to'g'ri tushunganimga ishonchim komil emas, chunki fon musiqasi uchun eng oddiy senariy.

Agar har bir sahnada audioklipni almashtirishni xohlasangiz, A sahnasi A va B sahnesini B Klipini o'ynashi kerak va ikkala videoklip ham sahna yuklangandan so'ng o'ynalishi kerak, faqat o'yin ob'ektini yaratishingiz kerak Ovoz manbai komponenti bilan ikkala sahnada, "Uyg'oning ustiga o'ynang" bayrog'i bilan faollashtiriladi va so'ngra sahna uchun mos klipni belgilang (ya'ni, "A" o'yin ob'ektining Ovoz manbai komponentining Audio clip sohasida Audio A klipini tayinlang va Sahna B uchun B B bilan ham xuddi shunday qiling.

Bu juda ko'p.

0
qo'shib qo'ydi

Men sizning savolingizni to'g'ri tushunganimga ishonchim komil emas, chunki fon musiqasi uchun eng oddiy senariy.

Agar har bir sahnada audioklipni almashtirishni xohlasangiz, A sahnasi A va B sahnesini B Klipini o'ynashi kerak va ikkala videoklip ham sahna yuklangandan so'ng o'ynalishi kerak, faqat o'yin ob'ektini yaratishingiz kerak Ovoz manbai komponenti bilan ikkala sahnada, "Uyg'oning ustiga o'ynang" bayrog'i bilan faollashtiriladi va so'ngra sahna uchun mos klipni belgilang (ya'ni, "A" o'yin ob'ektining Ovoz manbai komponentining Audio clip sohasida Audio A klipini tayinlang va Sahna B uchun B B bilan ham xuddi shunday qiling.

Bu juda ko'p.

0
qo'shib qo'ydi