Unity 씬 전환 딜레이 생성 방법
public class SceneChange : MonoBehaviour
{
Invoke("load_B_Scene",1.0f);
Invoke("load_C_Scene",1.0f);
public void SceneChangeBtn()
{
if (SceneManager.sceneCountInBuildSetting == 0)
SceneManager.LoadScene("B_Scene");
else if (SceneManager.sceneCountInBuildSetting == 1)
SceneManager.LoadScene("C_Scene");
}
}
아직 Invoke 활용이 익숙하지 않아, 2가지 씬으로 각각 이동하는 방법을 구상하지 못하였고
메서드를 어떻게 분리해야 할지 몰라서 포기하게 되었습니다.
public class SceneChange : MonoBehaviour
{
public void SceneChangeBtn()
{
if (SceneManager.sceneCountInBuildSetting == 0)
StartCoroutine(load_B_Scene());
else if (SceneManager.sceneCountInBuildSetting == 1)
StartCoroutine(load_C_Scene());
}
IEnumerator load_B_Scene()
{
yield return new WaitForSeconds(1.0f);
SceneManager.LoadScene("B_Scene");
}
IEnumerator load_C_Scene()
{
yield return new WaitForSeconds(1.0f);
SceneManager.LoadScene("C_Scene");
}
}
코루틴으로 작성을 했을 때에도 현재 씬을 제대로 인지하지 못하고
sceneCountInBuildSetting 값을 지우게 되면 코루틴이 멈추지 않아서
A씬에서 B씬으로 이동을 하지 않고 바로 C씬으로 이동이 되었습니다.
씬 이동 시 1초의 딜레이는 발생했지만, 효과음까지 함께 멈추게 되어 사용하지 못함
public class SceneChange : MonoBehaviour
{
// 어떤 버튼인지 설정
public void SceneChangeBtn()
{
// 이 씬이 빌드 세팅 기준 0번 씬이라면
if (SceneManager.GetActiveScene().buildIndex == 0)
// load_B_Scene 함수에서 코루틴을 시작해라
StartCoroutine(load_B_Scene());
// 이 씬이 빌드 세팅 기준 0번이 아니고 1번 씬이라면
else if (SceneManager.GetActiveScene().buildIndex == 1)
// load_C_Scene 함수에서 코루틴을 시작해라
StartCoroutine(load_C_Scene());
}
// load_B_Scene 설정
IEnumerator load_B_Scene()
{
// 코루틴 설정 값 : 다음 값만큼 기다려라 (1초)
yield return new WaitForSeconds(1.0f);
// B_Scene을 불러와라
SceneManager.LoadScene("B_Scene");
// load_B_Scene 코루틴을 정지해라
StopCoroutine(load_B_Scene());
}
IEnumerator load_C_Scene()
{
yield return new WaitForSeconds(1.0f);
SceneManager.LoadScene("C_Scene");
StopCoroutine(load_C_Scene());
}
}
Invoke를 제대로 활용해보지 못해서 아쉬움
보다 더 간결하게 코드를 짜지 못한 부분이 아쉬움
고작 이런 문제로 3시간을 허비한 것이 정말 아쉬움