BUG點 : Timeout while trying to pause the Unity Engine
引發這個的可能性有很多,這裡只談到我遇到的這一種
當視窗沒有失焦,然後你可能使用了任何一個改變視窗的function((像是投影到電腦)),在這之後,如果單純觸發了activity的onPause方法,沒有讓onWindowChangeFocus一起被觸發的話,在onResume的時候,unity就會當掉了,這時候如果又要onPause Unity的話就會出現
Timeout while trying to pause the Unity Engine.
這裡是我解這bug幾天的心得,可能跟事實不一定完全相同,知識點可能也有誤,可以看看就好。
Unity內有許多系統的function ,其中有個 OnApplicationPause 跟 onApplicationfocus
官方連結:
OnApplicationFocus他是在UnityPlayerActivity內的 onWindowChangeFocus上觸發的,((如果我沒記錯的話)),然後OnApplicationPause也是UnityPlayerActivity內的 onPause 去觸發的
其中onWindowChangeFocus這個很重要,他是在渲染完成的時候調用的
當現在你的螢幕視窗被改變了,像是miracast到電腦,如果你沒觸發mUnityPlayer.windowChangeFocus讓unity去改變底層的東西,就直接pause他並resume的話就會出現問題,所以在pause之前(或之後?) 必須call [mUnityPlayer.windowChangeFocus ] ((這裡是嚴重的猜測,很不一定是真的))
hi,請問在untiy中要如何call到java中繼承UnityPlayerActivity的方法windowChangeFocus?
回覆刪除應該是pause要如何調用onWindowFocusChanged(boolean b )呢? boolean值怎麼確定?
回覆刪除@Override
public void onWindowFocusChanged(boolean b) {
super.onWindowFocusChanged(b);
}
@Override
protected void onPause() {
super.onPause();
}
有點悠久了XD 沒通知完全忘記有寫Blog這回事
回覆刪除@Override
protected void onResume() {
super.onResume();
mUnityPlayer.windowFocusChanged(true);
}
@Override
protected void onPause() {
super.onPause();
mUnityPlayer.windowFocusChanged(false);
}
主要是mUnityPlayer.windowFocusChagned()這一段
再pause 跟 resume的時候加上去,就可以解決那種投影後會LAG的問題
不過有點久了,忘記是mUnityPlayer.onWindowFocusChanged(boolean)還是windowFocusChagned(boolean)了