从这个基类派生以提供对特定 SceneManager 方法的 C# 行为的替代实现。
提供的示例记录场景是否通过索引加载,并记录一条警告以切换到通过场景路径加载。
using UnityEngine; using Debug = UnityEngine.Debug; using UnityEngine.SceneManagement;
public class SceneIndexLogger : SceneManagerAPI { [RuntimeInitializeOnLoadMethod] static void OnRuntimeMethodLoad() { SceneManagerAPI.overrideAPI = new SceneIndexLogger(); }
protected override int GetNumScenesInBuildSettings() { Debug.LogWarning("SceneManager.GetNumScenesInBuildSettings() called, please load scenes by path to avoid issues when scenes are reordered."); return base.GetNumScenesInBuildSettings(); }
protected override Scene GetSceneByBuildIndex(int buildIndex) { Debug.Log($"SceneManager.GetSceneByBuildIndex(buildIndex = {buildIndex}) called, please load scenes by path to avoid issues when scenes are reordered."); return base.GetSceneByBuildIndex(buildIndex); } }
overrideAPI | 用于处理覆盖的 SceneManager 方法的特定 SceneManagerAPI 实例。 |
GetNumScenesInBuildSettings | 覆盖以自定义 SceneManager.sceneCountInBuildSettings 函数的行为。 |
GetSceneByBuildIndex | 覆盖以自定义 SceneManager.GetSceneByBuildIndex 函数的行为。 |
LoadFirstScene | 覆盖以自定义在存根播放器构建中加载第一个场景的行为。 |
LoadSceneAsyncByNameOrIndex | 覆盖以自定义 SceneManager.LoadScene 和 SceneManager.LoadSceneAsync 函数的行为。 |
UnloadSceneAsyncByNameOrIndex | 覆盖以自定义 SceneManager.UnloadSceneAsync 函数的行为。 |