Djeurissen Geschrieben 14. Mai 2014 Melden Share Geschrieben 14. Mai 2014 using UnityEngine; using System.Collections; using System.Collections.Generic; public class AttackList : MonoBehaviour { public List<IAttack> Attacks = new List<IAttack>(); TestAttack MyTestAttack = new TestAttack(); void Start () { MyTestAttack.cooldown = 6; Attacks.Add(MyTestAttack); Debug.Log (Attacks[0].cooldown); } } Joa, das funktioniert alles ganz Knorke nur gibt es eben andauernd die ganzen Warnungen You are trying to create a MonoBehaviour using the 'new' keyword. This is not allowed. MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all UnityEngine.MonoBehaviour:.ctor() TestAttack:.ctor() Ja, keine Ahnung was ich da jetzt machen soll. Ich meine die Warnung verstehe ich schon, aber ich weiß nicht was ScriptableObject jetzt genau ist und AddComponent nützt mir hier auch nicht viel... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
7BiT.psycho Geschrieben 14. Mai 2014 Melden Share Geschrieben 14. Mai 2014 Der Fehler liegt wie Du bereits erwähnt hast in dieser Zeile: TestAttack MyTestAttack = new TestAttack(); Die Klasse "TestAttack" stammt von "MonoBehaviour" ab. Klassen die von MonoBehaviour abstammen lassen sich jedoch nicht mithilfe des new Keywords als ein neues Objekt erstellen, da MonoBehaviour nur für Components "reserviert" ist. Unity schlägt Dir somit vor folgendes zu tun: http://docs.unity3d....ableObject.html <-- Unbedingt durchlesen!!! public class MyNameIsOlafAndILikeWarmScriptableObjects : ScriptableObject { public Rigidbody Body; public MyNameIsOlafAndILikeWarmScriptableObjects() { Body = GameObject.FindObjectOfType<Rigidbody>(); Debug.Log("Olaf"); } } Jedoch glaube ich nicht dass Du das bezwecken möchtest wofür ScriptableObject ausgelegt ist. Wenn doch kannst Du an dieser Stelle aufhören zu lesen in 95% der Fällte reicht es jedoch aus Klassen die nur auf den UnityEngine namespace zugreifen einfach nur von System.Object (Also dem Standard) abstammen zu lassen. public class MyNameIsNotOlafAndIPreferBoringObjects : System.Object { public Rigidbody Body; public MyNameIsNotOlafAndIPreferBoringObjects() { Body = GameObject.FindObjectOfType<Rigidbody>(); Debug.Log("Nicht Olaf"); } } Führt beides zum selben Ergebnis jedoch ist der von Ersteller gedachte Anwendungszweck verschieden. ScriptableObject.CreateInstance<MyNameIsOlafAndILikeWarmScriptableObjects>(); new MyNameIsNotOlafAndIPreferBoringObjects(); 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.