SceneManager.Unloadを、OnTriggerEnter時に呼ぶと凍る

TOC

こんにちは。
昨夜、Unityがフリーズしてしまって、結構大変でした。

Unity 5.3.1です。

次のように実行すると、フリーズしました。

1
2
3
4
5
6
7
void OnTriggerEnter2D(Collider2D col2d)
{
if (col2d.tag == "Player")
{
SceneManager.UnloadScene("MainMenu");
}
}

なぜか、

  • SceneManager.LoadSceneではフリーズせず、
  • FixedUpdateUpdateのタイミングでやってもフリーズしない

です。

というわけで、次のようにしたら直りました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool isEnter = false;
void OnTriggerEnter2D(Collider2D col2d)
{
if (col2d.tag == "Player")
{
isEnter = true;
}
}
void OnTriggerExit2D(Collider2D col2d)
{
if (col2d.tag == "Player")
{
isEnter = false;
}
}
void Update()
{
if (isEnter)
{
SceneManager.UnloadScene("MainMenu");
}
}