Scene sceneManager;
public AudioSource main;
public AudioSource play;
public AudioSource fever;
void Awake()
{
ย ย sceneManager = SceneManager.GetActiveScene();
ย ย DontDestroyOnLoad(gameObject);
}
void OnEnable()
{
ย ย SceneManager.sceneLoaded += OnSceneLoaded;
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
ย ย switch (scene.name)
ย ย {
ย ย ย ย case "Main":
ย ย ย ย ย ย StartCoroutine("Main");
ย ย ย ย ย ย break;
ย ย ย ย case "Play":
ย ย ย ย ย ย StartCoroutine("Play");
ย ย ย ย ย ย break;
ย ย }
}
IEnumerator Main()
{
ย ย yield return null;
ย ย play.Stop();
ย ย fever.Stop();
ย ย if (!main.isPlaying)
ย ย {
ย ย ย ย main.Play();
ย ย }
ย ย StartCoroutine("Main");
}
IEnumerator Play()
{
ย ย yield return null;
ย ย main.Stop();
ย ย if (!play.isPlaying && !GameManager.Instance.isFever)
ย ย {
ย ย ย ย play.Play();
ย ย ย ย fever.Pause();
ย ย }
ย ย else if (!fever.isPlaying && GameManager.Instance.isFever)
ย ย {
ย ย ย ย fever.Play();
ย ย ย ย play.Pause();
ย ย }
ย ย StartCoroutine("Play");
}
๋ญ๊ฐ ๋ฌธ์ ์ผ๊น
์ง๊ธ ๋ฐ์ํ๋ ํ์์ Main์์ Play๋ก ์ฌ์ด ๋์ด๊ฐ๋
Main ์์ ์์ฒด๋ ๋ฉ์ถ๋๋ฐ, Play ์ฌ์ผ๋ก ๋์ด๊ฐ๋ ์์ ์์ ์ฌ์์ด ์๋จ
๋น์ฐํ ๋ค ๋ฃ์ด๋จ๊ณ , ๊ฐ ์์ค๋ง๋ค ์ค์ ๋ ๋์ด์์
๋น์ฐํ ์ฌ ์ด๋ฆ๋ ์ผ์นํจ
๋ ๋๋ฒ๊น ํด๋ณด๋๊น Main ์์ Play๋ก ๋์ด๊ฐ ๋ Scene ์ด๋ฆ์ด ์์ Null๊ฐ์ด ๋ผ๋ฒ๋ฆฌ๋ค? ์ด๊ฑฐ ๊ดํด์ ์๋ ์ฌ๋?
ํน์ ๋ณ์ ์ ์ธ์ sceneManager ๋ OnEnable() ์ SceneManager ๋ ๊ฐ์ ๋ ์์? ์ฌ๊ธฐ์ ์๋ณด์ฌ๋ using UnityEngine.SceneManagement ์จ๋์ ๊ฒ ๊ฐ์ง๋ง Null ๋ด๋ค๊ณ ํ๋๊น ํน์๋ ํด์
์ ๋ง์ ์ผ๋จ ์ง๊ธ์ ๊ทธ๋ฅ DontDestroyOnLoad ์์ฐ๊ณ ๊ทธ๋ฅ ๋ Scene์ ๊ทธ๋ฅ ๋๊ฐ์ ์ค๋ธ์ ํธ ๋ ๊ฐ๋ฅผ ๋ฃ์ด๋์ ์ํ๋ ๋๋ก ์๋ํ๊ณ ์๊ธด ํ๋ฐ ์ง๊ธ ์ ํํ๋ ๋ถ๋ฅจ ์กฐ์ ๊ธฐ๋ฅ + ๊ฒ์์ ๊บผ๋ ๋ก์ปฌ ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ๋ค์ ์ผฐ์ ๋ ์ค์ ์ด ์ ์ง๋๊ฒ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ ์ค์ธ๋ฐ ๊ทธ๋ฅ ์ด๋๋ก ํด๋ ๋ฌธ์ ๊ฐ ์์๊น?
ใ ใ ๋์ ์์ฒด๋ ์๋ํ๋๋ก ์์ง์ผ๊บผ๋๊น ๋ฌธ์ ๋ ์์๊ฑฐ์ Scene ์ด๋ฆ์ ์์ Null ๋ฌ ์ด์ ๋ Awake ํ ๋ ๋ฃ์ sceneManager = SceneManager.GetActiveScene() ๋๋ฌธ์ผ๊ฑฐ๋ผ๊ณ ์ง์๋จ sceneManager ๋ ์์ด ์๋ฌธ์๊ณ OnEnable() ์ SceneManager ๋ ๋๋ฌธ์๋ผ ๊ฐ๋ฌผ๊ฐ๋ฌผ ํ๋๋ฐ ์๋ก ๊ฐ๋ค๊ณ ํ๋๊น.. UnityEngine.SceneManagement.SceneManager.sceneLoaded ์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ๊ฑด ๊ฒ ์๋๋ผ Awake ํ์ ๋์ ActiveScene ์ฆ Main์ sceneLoaded ์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ๊ฑธ์ด์ ์ฌ์ด ๋์ด๊ฐ ๋ OnSceneLoaded ์์ฒด๋ ์คํ ๋๋ ์ฌ ์ด๋ฆ์ ๋ณด๋ด์ค Main ์ ์ด๋ฏธ ์ฌ๋ผ์ง๊ณ ์๋๊ฑฐ์ง
์ ๊ทธ๋ฐ๊ฑฐ์๊ตฌ๋ ๊ทธ๋ฌ๋ฉด ๋ง์ฝ sceneManager = SceneManager.GetActiveScene() ๋ฅผ Awake๊ฐ ์๋ LateUpdate ๊ฐ์ ๊ณณ์ ๋ฃ์ผ๋ฉด ์ ์ ์๋ํ๋๊ฑธ๊น
ใดใด ํด๋น ํํ๋ก ์ฐ๋ ค๋ฉด SceneManager.GetActiveScene() ์ ์ฐ๋ฉด ์๋๊ณ UnityEngine.SceneManagement.SceneManager.sceneLoaded ์ += OnSceneLoaded ํด์ค์ผํจ
https://mentum.tistory.com/316
์ฌ๊ธฐ
๋์จ ์ฝ๋๋๋ก ์ฐ๋ฉด scene.name ์ด Null ๋ก ๋์ค์ง ์์๊ฑฐ์ผ
์ค ๊ณ ๋ง์
LateUpdate ์ SceneManager.GetActiveScene() ์ ๋ฃ์ด๋ ๋ธ๋ฆฌ๊ฒ์ดํธ์ ์ฒด์ธ์ ๊ฑฐ๋ ์์ ์ OnEnable() ๋ ํ๋ฒ ๋ฟ์ด๋๊น OnSceneLoaded ๊ฐ ๋ณด๊ณ ์๋ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ Main ์ฌ์ sceneLoaded ๊ณ ์ ์ด๋ผ์ ๋์ค์ sceneManager ๋ฅผ ๋ฐ๊ฟ์ค๋ค๊ณ ๋ธ๋ฆฌ๊ฒ์ดํธ๊ฐ ๋ณํ์ง ์์์ ์๋ก ๋ค์ ์ฐ๊ฒฐ์ ํด์ค์ผํจ
๋จธ ๊ทผ๋ฐ ์ ๋ ๊ฒ ์ ์๋ค๊ณ ํด์ ์ง์ง ๋งค๋ฒ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ฐ๊ฒฐํ๋๊ฑด ๋นํจ์จ์ ์ด๊ธฐ๋ ํ๊ณ ๋ฌธ์ ๋ ์๊ธธ ๊ฑฐ๋ฆฌ๊ฐ ๋ง์ผ๋๊น ์ฌ ์ ํ ๋์ ๊ด๋ จํด์ ๋์ ์ผ๋ก ๊ด๋ฆฌ๋๋ UnityEngine.SceneManagement.SceneManager.sceneLoaded ๋ธ๋ฆฌ๊ฒ์ดํธ์ ์ฐ๊ฒฐํด์ ์ฐ๋๊ฒ ์ข์
์น์ ํ ์ค๋ช ๊ณ ๋ง์ ํ ๋ฒ ์ด์ฌํ ๊ณต๋ถํด๋ณผ๊ฒ