【Unity】Timeout while trying to pause the Unity Engine

這個BUG其實也不知道從何說起,這篇是默認看的人已經知道android跟java那些知識了,細節就不加以詳述了,因為大多都是以自己的理解去解釋,沒追證過,如果理解有誤還麻煩告知我XD

引發這個的可能性有很多,這裡只談到我遇到的這一種

當視窗沒有失焦,然後你可能使用了任何一個改變視窗的function((像是投影到電腦)),在這之後,如果單純觸發了activity的onPause方法,沒有讓onWindowChangeFocus一起被觸發的話,在onResume的時候,unity就會當掉了,這時候如果又要onPause Unity的話就會出現

Timeout while trying to pause the Unity Engine.

這裡是我解這bug幾天的心得,可能跟事實不一定完全相同,知識點可能也有誤,可以看看就好。

Unity內有許多系統的function ,其中有個 OnApplicationPause 跟 onApplicationfocus

官方連結:
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnApplicationPause.html
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnApplicationFocus.html

OnApplicationFocus他是在UnityPlayerActivity內的 onWindowChangeFocus上觸發的,((如果我沒記錯的話)),然後OnApplicationPause也是UnityPlayerActivity內的 onPause 去觸發的

其中onWindowChangeFocus這個很重要,他是在渲染完成的時候調用的

所以當現在你的螢幕視窗被改變了,像是miracast到電腦,如果你沒觸發mUnityPlayer.windowChangeFocus讓unity去改變底層的東西,就直接pause他並resume的話就會出現問題,所以疑似在pause之前(或之後?) 必須call [mUnityPlayer.windowChangeFocus ]