3 回答
TA贡献1946条经验 获得超3个赞
你不能
预制件没有调用它们的 MonoBehaviour 方法,因为它们尚未且永远不会被初始化。
请注意,您可以在检查器中自己分配属性,而Awake
根本不用担心调用。
TA贡献1776条经验 获得超12个赞
我遇到了一些类似的问题,试图在实例化预制件设置之前对其进行初始化。我很难理解,因为我期望有更干净的方式来做到这一点,但似乎是 Unity 中的自然方式。通常来自 c++、c# 或 oop,它可能用于像在类构造函数中一样设置组件。我得到的结论是,从编程的角度来看,Unity 并没有完全达到这种操作方法。当然,您可以使用 C# 普通类及其构造函数等(不是从 monobehaviour 继承),但如果您准备使用 Unity 类和工具,您应该从编程的角度经历在 Unity 中设置类的尴尬方式,另一方面又非常有效。
TA贡献1865条经验 获得超7个赞
ISerializationCallbackReceiver.OnAfterDeserialize() 可以用作预制件的 Awake() 的替代品。它的使用方式如下:
public class AnyCustomComponent : MonoBehaviour, ISerializationCallbackReceiver
{
public AnySerializedData serializedData;
private AnyInitializedData initializedData;
public void OnBeforeSerialize() { }
public void OnAfterDeserialize()
{
initializedData = serializedData.Init();
}
}
需要注意的是,此回调不仅会在游戏开始时发生,还会在编辑器中编辑期间发生,但我想在大多数情况下,这实际上不应该成为问题。
- 3 回答
- 0 关注
- 149 浏览
添加回答
举报