无法通过 LoadSceneAsync 加载 EasyAr 场景
Cant load EasyAr scene by LoadSceneAsync
我试图通过脚本 b 使用 EasyAR 异步加载场景。但它不起作用。
SceneManager.LoadSceneAsync("Scene_name")
如果我尝试使用
加载场景,它会起作用
SceneManager.LoadScene("Scene_name")
问题是:有什么方法可以异步加载吗?
使用 C#。
在 Android 设备上测试。
统一 2018.3.12f
Easy AR ver. 3.0
谢谢!
新代码更新:
private void WallSceneLoader()
{
_loaderGameObject.SetActive(true);
var asyncScene = SceneManager.LoadSceneAsync(Constants.Scenes.AR_SCENE);
asyncScene.allowSceneActivation = false;
while (asyncScene.progress < 0.9f)
{
var progress = Mathf.Clamp01(asyncScene.progress / 0.9f);
_loaderBar.value = progress;
}
Debug.Log("asyncScene.isDone = true");
asyncScene.allowSceneActivation = true;}
_loader.gameObject
它只是带有进度条的滑块。
通过在 "normal" 方法中使用此 while
循环,您无论如何都会阻塞线程,因此您在这里失去了异步的全部优势。
您更想做的是在 Coroutine like it is actually also shown in the example for SceneManager.LoadSceneAsync
中使用它
private IEnumerator WallSceneLoader()
{
_loaderGameObject.SetActive(true);
var asyncScene = SceneManager.LoadSceneAsync(Constants.Scenes.AR_SCENE);
asyncScene.allowSceneActivation = false;
while (asyncScene.progress < 0.9f)
{
var progress = Mathf.Clamp01(asyncScene.progress / 0.9f);
_loaderBar.value = progress;
// tells Unity to pause the routine here
// render the frame and continue from here in the next frame
yield return null;
}
Debug.Log("asyncScene.isDone = true");
asyncScene.allowSceneActivation = true;
}
然后在你想调用的地方使用StartCoroutine
StartCoroutine(WalSceneLoader());
我试图通过脚本 b 使用 EasyAR 异步加载场景。但它不起作用。
SceneManager.LoadSceneAsync("Scene_name")
如果我尝试使用
加载场景,它会起作用SceneManager.LoadScene("Scene_name")
问题是:有什么方法可以异步加载吗?
使用 C#。
在 Android 设备上测试。
统一 2018.3.12f
Easy AR ver. 3.0
谢谢!
新代码更新:
private void WallSceneLoader()
{
_loaderGameObject.SetActive(true);
var asyncScene = SceneManager.LoadSceneAsync(Constants.Scenes.AR_SCENE);
asyncScene.allowSceneActivation = false;
while (asyncScene.progress < 0.9f)
{
var progress = Mathf.Clamp01(asyncScene.progress / 0.9f);
_loaderBar.value = progress;
}
Debug.Log("asyncScene.isDone = true");
asyncScene.allowSceneActivation = true;}
_loader.gameObject
它只是带有进度条的滑块。
通过在 "normal" 方法中使用此 while
循环,您无论如何都会阻塞线程,因此您在这里失去了异步的全部优势。
您更想做的是在 Coroutine like it is actually also shown in the example for SceneManager.LoadSceneAsync
private IEnumerator WallSceneLoader()
{
_loaderGameObject.SetActive(true);
var asyncScene = SceneManager.LoadSceneAsync(Constants.Scenes.AR_SCENE);
asyncScene.allowSceneActivation = false;
while (asyncScene.progress < 0.9f)
{
var progress = Mathf.Clamp01(asyncScene.progress / 0.9f);
_loaderBar.value = progress;
// tells Unity to pause the routine here
// render the frame and continue from here in the next frame
yield return null;
}
Debug.Log("asyncScene.isDone = true");
asyncScene.allowSceneActivation = true;
}
然后在你想调用的地方使用StartCoroutine
StartCoroutine(WalSceneLoader());