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 關注
- 212 瀏覽
添加回答
舉報