[英]ARCore session is not restarting
使用 Google ARCore,當我在我構建的游戲中時,我有一個重新啟動按鈕來清除場景並重新啟動關卡。 我是通過使用Scenemanager.LoadScene()
重新加載場景來做到這一點的,但是當場景重新加載時,相機沒有初始化,只是顯示一個藍屏,我的 UI 位於頂部。
我可以在代碼中使用什么來確保在重新加載場景時不會發生這種情況?
在ARCore NDK中,您將使用以下方法破壞會話並釋放其資源:
void ArSession_destroy(
ArSession *session
)
此方法釋放ARCore會話使用的資源。 這將需要幾秒鍾才能完成。 為了防止阻塞主線程,調用ArSession_pause()
在主線程上,然后呼叫ArSession_destroy()
在后台線程 。
然后,您必須使用創建一個新會話:
ArSession_create()
另外, 在ARCore Android中 , 當前會話通常具有onPause()
和onResume()
方法。 但是我使用了另外兩個: pause()
用於暫停當前會話, resume()
用於啟動或恢復ARCore當前會話。
在Unity中,您應根據自己的目的嘗試DestroyImmediate(session)
或Destroy(session)
。
ARCoreSession session = goARCoreDevice.GetComponent<ARCoreSession>();
ARCoreSessionConfig myConfig = session.SessionConfig;
DestroyImmediate(session);
// Destroy(session);
yield return null;
session = goARCoreDevice.AddComponent<ARCoreSession>();
session.SessionConfig = myConfig;
session.enabled = true;
希望這可以幫助。
對於那些在android studio中遇到與ARCore有關的問題,為了解決此問題,我使用了替換片段而不是重新啟動整個Activity的簡單解決方法。
過程:我正在動態添加ArFragment,當用戶按下刷新按鈕時,我將替換整個片段。
1-動態添加片段:
getSupportFragmentManager()
.beginTransaction()
.add(R.id.container, new MainARFragment())
.addToBackStack(null)
.commit();
2-這是我的刷新按鈕代碼:
refreshButton.setOnClickListener(view -> {
//refresh everything remove models and detect from start
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new MainARFragment()).commit();
});
一切正常,但是當我在將其添加到onCreate方法中后嘗試查找FragmentById時,出現了空指針異常。 為了避免這種情況,請使用ArFragment中的Callback,並在ArFragment的onAttach中調用onComplete方法,然后使用:
arFragment = (MainARFragment) getSupportFragmentManager().findFragmentById(R.id.container);
希望這會有所幫助。
@Nouman Ch
根據您的方法,該片段已成功替換,但是我遇到了一個新問題。 onupdatelistener未更新,並且重新啟動會話后無法獲取相機姿態。 您如何理解答案中的“請在配置中使用回調”一句? 我不知道該怎么用。 我在stackflow中詢問問題,但沒人回答我。 點擊這里獲取詳細信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.