场景:
SceneManager是Unity中用于管理场景的静态类,提供了一些常用的场景管理功能。下面是SceneManager的一些常用用法:
方法
加载场景
public static Scene LoadScene(string sceneName, LoadSceneMode mode = LoadSceneMode.Single);
其中,sceneName参数是要加载的场景的名称,mode参数是加载场景的模式,有以下两种:
LoadSceneMode.Single:加载一个新场景,关闭当前场景。
LoadSceneMode.Additive:加载一个新场景,添加到当前场景中。
SceneManager.LoadScene("Scene2");
异步加载场景
public static AsyncOperation LoadSceneAsync(string sceneName, LoadSceneMode mode = LoadSceneMode.Single);
该函数可以异步加载场景,可以通过回调函数来判断场景是否加载完成。示例代码:
SceneManager.LoadSceneAsync("Scene2").completed += operation => {
Debug.Log("Scene2 loaded");
};
卸载场景
public static bool UnloadSceneAsync(int sceneBuildIndex);
public static bool UnloadSceneAsync(string sceneName);
其中,sceneBuildIndex参数是要卸载的场景的索引,sceneName参数是要卸载的场景的名称。示例代码:
SceneManager.UnloadSceneAsync("Scene2");
获取当前场景
public static Scene GetActiveScene();
示例代码:
Scene scene = SceneManager.GetActiveScene();
Debug.Log("Current scene: " + scene.name);
获取场景中的所有游戏对象
public static Scene GetSceneByName(string name);
public static Scene GetSceneByPath(string scenePath);
public static Scene GetSceneByBuildIndex(int buildIndex);
public static GameObject[] GetActiveSceneGameObjects();
其中,GetSceneByName函数根据场景名称获取场景,GetSceneByPath函数根据场景路径获取场景,GetSceneByBuildIndex函数根据场景索引获取场景,GetActiveSceneGameObjects函数获取当前场景中的所有游戏对象。示例代码:
Scene scene = SceneManager.GetSceneByName("Scene2");
GameObject[] gameObjects = scene.GetRootGameObjects();
判断场景是否已加载
public static bool SceneLoaded(int sceneBuildIndex);
public static bool SceneLoaded(string sceneName);
示例代码:
bool loaded = SceneManager.SceneLoaded("Scene2");
Debug.Log("Scene2 loaded: " + loaded);
设置场景的光照贴图
public static void SetLightmapPreviewTexture(Texture2D texture);
示例代码:
Texture2D lightmap = Resources.Load<Texture2D>("Lightmap");
SceneManager.SetLightmapPreviewTexture(lightmap);
设置场景的雾效
public static void SetFog(FogMode mode, Color color, float density, float start, float end);
示例代码:
SceneManager.SetFog(FogMode.Exponential, Color.gray, 0.01f, 10f, 100f);
设置场景的天空盒
public static void SetActiveSceneSkybox(Material skybox);
示例代码:
Material skybox = Resources.Load<Material>("Skybox");
SceneManager.SetActiveSceneSkybox(skybox);