2015-06-15 117 views
0

有沒有一種方法可以實例化從MonoBehaviour派生的類,例如下面的示例,而不會收到警告:「您嘗試使用'new'關鍵字創建MonoBehaviour。 。允許只能用AddComponent()被添加MonoBehaviours或者,你的腳本可以從個ScriptableObject或沒有基類在所有」實例化派生自MonoBehaviour的類

實例繼承:

public class e1506131012test2 : MonoBehaviour 
{ 
    Move move = new Move(); 
    //Move move = gameObject.GetComponent<Move>(); 

    void Update() 
    { 
     move.Printing(); 
    } 

} 

public class Move : MonoBehaviour 
{ 
    public int number = 5; 

    public void Printing() 
    { 
     print(number); 
    } 
} 
+1

請您澄清「這是不允許的」部分需要更多解釋嗎?或者,您可以說明您的實際目標,並且可能有不同的方法來實現它。 –

+0

嘗試:AddComponent(Move);在「class e1506131012test2」中,不要讓Move從MonoBehaviour派生... – Johan

+0

AddComponent(Move);或gameObject.Addcomponent ();給我另一個控制檯錯誤(請參閱下面的答案)。我想實例化一個派生自MonoBehaviour的類(例如:class myClass:MonoBehaviour into myOtherClass) – cubecube

回答

0

有你可以做到這一點的幾種方法,最簡單的可能是使用AddComponent作爲錯誤消息的建議:

Move move; 
void Start() 
{ 
    move = gameObject.Addcomponent<Move>(); 
} 

的原因,你不能只是new了從MonoBehaviour派生的是,這樣的對象必須是GameObject的組件對象。因此,每當你創建一個你必須確保它以有效的方式添加。

+0

謝謝,當我使用 move move = gameObject.Addcomponent (); 我在控制檯中的錯誤說: 「一個字段初始不能引用非靜態字段,方法或屬性'UnityEngine.Component.gameObject」 希望有一種方法來實例化從MonoBehaviour派生的類沒有得到控制檯錯誤或警告。乾杯 – cubecube

+0

是的,抱歉,我沒有想到,我已經更新了我的答案,應該有效。順便提一句,如果你的'e1506131012test2'遊戲對象總是有一個'Move'組件,你可能想通過檢查器添加它。 –

+0

謝謝Adam,所以這意味着我每次想實例化一個從MonoBehaviour派生出來的類並附上類scrip時,就必須創建一個新的gameObject,對吧?我希望將它保持在代碼級別上(不要拖放到Inspector中),你會有什麼建議可以寫出最好的方法嗎?乾杯 – cubecube

0

只是不從MonoBehaviour派生。

public class Move 
{ 
    public int number = 5; 

    public void Printing() 
    { 
     print(number); 
    } 
} 

如果它真的必須是一個MonoBehaviour,這意味着你可能有它的一個預製,在這種情況下,你使用實例化()。

+0

感謝Andrew的評論。 – cubecube

相關問題