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

RuntimeInitializeLoadType.BeforeSceneLoad

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法采纳所有提交的内容,但我们会阅读用户提出的每个修改建议,并在适用情况下进行更新。

关闭

提交失败

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

关闭

取消

描述

在第一个场景的对象加载到内存中但调用 Awake 之前调用的回调函数。

有关排序的更多信息,请参阅 RuntimeInitializeOnLoadMethodAttribute

// Demonstration of the RuntimeInitializeLoadType.BeforeSceneLoad attribute to find inactive objects before Awake has been 
// called for the first scene being loaded. Then from these inactive objects we find which ones will be active after Awake is called later.
using UnityEngine;

class MyClass { [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void FirstSceneLoading() { var components = UnityEngine.Object.FindObjectsByType(typeof(MonoBehaviour), FindObjectsInactive.Include, FindObjectsSortMode.None); var willBeActiveAfterSceneLoad = 0; foreach (var c in components) { if (WillBeActiveAfterSceneLoad(((Component)c).gameObject)) willBeActiveAfterSceneLoad++; } Debug.Log("BeforeSceneLoad. Will be Active after Awake, count: " + willBeActiveAfterSceneLoad); }

static bool WillBeActiveAfterSceneLoad(GameObject gameObject) { Transform current = gameObject.transform; while (current != null) { if (!current.gameObject.activeSelf) return false;

current = current.parent; }

return true; } }