Jump to content
Unity Insider Forum

Warning "new" für MonoBehaviour


Djeurissen

Recommended Posts

 

 

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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();

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...