版本: Unity 6 (6000.0)
语言英语
  • C#

AsyncOperation.allowSceneActivation

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每项更改建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

public bool allowSceneActivation;

描述

允许场景在准备好后立即激活。

您可以将此与SceneManager.LoadSceneAsync一起使用,以延迟场景的实际激活和先前场景的卸载。

allowSceneActivation设置为false时,Unity会将进度停止在0.9,并将maintains.isDone保持为false。当AsyncOperation.allowSceneActivation设置为true时,isDone可以完成。当isDone为false时,AsyncOperation队列会暂停。例如,如果LoadSceneAsync.allowSceneActivation设置为false,并且另一个AsyncOperation(例如SceneManager.UnloadSceneAsync)初始化,则Unity不会调用第二个操作,直到第一个AsyncOperation.allowSceneActivation设置为true。

您应该在协程函数中设置和使用AsyncOperation.allowSceneActivation。您不能在Awake中设置和使用AsyncOperation.allowSceneActivation,因为此函数不是协程。

//This script lets you load a Scene asynchronously. It uses an asyncOperation to calculate the progress and outputs the current progress to Text (could also be used to make progress bars).

//Attach this script to a GameObject //Create a Button (Create>UI>Button) and a Text GameObject (Create>UI>Text) and attach them both to the Inspector of your GameObject //In Play Mode, press your Button to load the Scene, and the Text changes depending on progress. Press the space key to activate the Scene. //Note: The progress may look like it goes straight to 100% if your Scene doesn’t have a lot to load.

using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI;

public class AsyncOperationProgressExample : MonoBehaviour { public Text m_Text; public Button m_Button;

void Start() { //Call the LoadButton() function when the user clicks this Button m_Button.onClick.AddListener(LoadButton); }

void LoadButton() { //Start loading the Scene asynchronously and output the progress bar StartCoroutine(LoadScene()); }

IEnumerator LoadScene() { yield return null;

//Begin to load the Scene you specify AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("Scene3"); //Don't let the Scene activate until you allow it to asyncOperation.allowSceneActivation = false; Debug.Log("Pro :" + asyncOperation.progress); //When the load is still in progress, output the Text and progress bar while (!asyncOperation.isDone) { //Output the current progress m_Text.text = "Loading progress: " + (asyncOperation.progress * 100) + "%";

// Check if the load has finished if (asyncOperation.progress >= 0.9f) { //Change the Text to show the Scene is ready m_Text.text = "Press the space bar to continue"; //Wait to you press the space key to activate the Scene if (Input.GetKeyDown(KeyCode.Space)) //Activate the Scene asyncOperation.allowSceneActivation = true; }

yield return null; } } }