Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ARCore会话未重新启动_Java_Android_Kotlin_Augmented Reality_Arcore - Fatal编程技术网

Java ARCore会话未重新启动

Java ARCore会话未重新启动,java,android,kotlin,augmented-reality,arcore,Java,Android,Kotlin,Augmented Reality,Arcore,使用Google ARCore,当我在游戏中创建时,我有一个重新启动按钮来清除场景并重新启动关卡。我是通过使用Scenemanager.LoadScene()重新加载场景来实现这一点的,但是当场景重新加载时,相机没有初始化,只是显示一个蓝色屏幕,上面有我的UI 我是否可以在代码中使用一些东西来确保在重新加载场景时不会发生这种情况?在ARCore NDK中,您可以使用以下方法销毁会话并释放其资源: void ArSession_destroy( ArSession *session )

使用Google ARCore,当我在游戏中创建时,我有一个重新启动按钮来清除场景并重新启动关卡。我是通过使用
Scenemanager.LoadScene()
重新加载场景来实现这一点的,但是当场景重新加载时,相机没有初始化,只是显示一个蓝色屏幕,上面有我的UI


我是否可以在代码中使用一些东西来确保在重新加载场景时不会发生这种情况?

在ARCore NDK中,您可以使用以下方法销毁会话并释放其资源:

void ArSession_destroy(
    ArSession *session
)
此方法释放ARCore会话使用的资源。需要几秒钟才能完成。要防止阻塞主线程,请在主线程上调用
ArSession\u pause()
,然后在后台线程上调用
ArSession\u destroy()

然后,您必须创建一个新会话:

ArSession_create()
另外,在ARCore Android中,通常有
onPause()
onResume()
方法用于当前会话。但是我使用了另外两种方法:
pause()
用于暂停当前会话,
resume()
用于启动或恢复当前会话

在Unity中您应该尝试
立即销毁(会话)
销毁(会话)

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;
ARCoreSession session=goARCoreDevice.GetComponent();
ARCoreSessionConfig myConfig=session.SessionConfig;
(会议);
//销毁(会议);
收益返回空;
session=goARCoreDevice.AddComponent();
session.SessionConfig=myConfig;
session.enabled=true;

希望这有帮助。

对于那些在android studio中遇到ARCore问题的人,为了解决这个问题,我使用了简单的解决方法,替换片段,而不是重新启动整个活动

过程:我正在动态添加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方法中添加了findFragmentById之后,尝试查找它时,我得到了null指针异常。要避免这种情况,请使用ArFragment的回调和ArFragment的onAttach调用onComplete方法,然后使用:

arFragment = (MainARFragment) getSupportFragmentManager().findFragmentById(R.id.container);

希望这会有所帮助。

您的Android控制台是否有任何错误?我也面临着与上述问题相同的问题。我怎样才能避开它?任何帮助……这似乎已在ARCore developer preview 2中解决。您正在使用最新版本的SDK吗?非常感谢您的耐心和帮助!ArSession类是否仅存在于NDK中?不在Android ArCore库中?(截图)。我不使用NDK来完成我的任务。是的,你完全正确,这个会话的管理是针对NDK的(虽然有文档记录)。我不知道是否存在ARCore Lib的会话管理。可能
,可能
。在这个问题上没有谷歌的描述…好的,谢谢!我会试着重新制作这个碎片,不客气!如果您成功地通过ARCore Lib销毁了一个会话,请告诉我。先生,您能帮我解决这个问题吗?