Jump to content
Unity Insider Forum
Bradley

Neues Leeres GameObject bei Unittests

Recommended Posts

Technisch kann ich bei Unity in einem Unittest ein leeres GameObject ja sehr einfach erzeugen:

GameObject gO = new GameObject();

Jetzt bringt mir Unity allerdings auch die Warnung:

Zitat

You are trying to create a MonoBehaviour using the 'new' keyword.  This is not allowed.  MonoBehaviours can only be  (at ?)added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all


Ich stehe jetzt tatsächlich auf den Schlauch wie ich ein leeres GameObject erstellen soll.

Share this post


Link to post
Share on other sites

Hallo,

So funktioniert es.

 

public class MeineClasse: MonoBehaviour

{

    public GameObject meines;

 

     void Awake()

    {

        meines = new GameObject();  

    }

 

Aber beachte, dass Unity keine ausprogrammierte Konstruktoren bei Klassen erlaubt, die von Unity-eigenen Klassen wie z.b MonoBehaviouir abgeleitet werden, dieses verstößt gegen die Designvorlage von Unity (Komponentenprogrammierung) und bringt die Ausführungslogik von Unity durcheinander.

 

Der normale Weg wäre von einem Leeren GameObject ein Prefab zu erstellen und dieses mit Instantiate() im Script zu erstellen.

 

Gruß Jog

Share this post


Link to post
Share on other sites

Die Zeile, die du da hast, ist nicht für den Fehler verantwortlich. Es sei denn, du hast eine Klasse erstellt, die "GameObject" heißt, was ich mal nicht hoffe.

Zusammengefasst:

// Geht:
var go = new GameObject("Test Object");

// Geht:
go.AddComponent<MyComponentType>();

// Geht nicht:
var myComponent = new MyComponentType();

 

  • Like 1

Share this post


Link to post
Share on other sites

Hallo,

Sorry mein Fehler.

Habe vergessen zu erwähnen das die Warnung nur auftaucht wenn man  " GameObject go = new GameObject(); " als Klassen-Member deklariert. Bei einer Deklaration in einer Methode natürlich nicht.

 

Gruß Jog

 

Share this post


Link to post
Share on other sites
vor 6 Stunden schrieb Jog:

Hallo,

Sorry mein Fehler.

Habe vergessen zu erwähnen das die Warnung nur auftaucht wenn man  " GameObject go = new GameObject(); " als Klassen-Member deklariert. Bei einer Deklaration in einer Methode natürlich nicht.

 

Gruß Jog

 

Das kann ich allerdings wiederlegen denn innerhalb meiner Tests deklariere ich das ausschließlich als Member von Methoden.

Share this post


Link to post
Share on other sites
vor 8 Stunden schrieb Jog:

das die Warnung nur auftaucht wenn man  " GameObject go = new GameObject(); " als Klassen-Member deklariert.

Die Meldung beschreibt ganz klar, dass da eine Komponente mit new erzeugt wird, nichts anderes.

Share this post


Link to post
Share on other sites
Am 28.2.2020 um 12:38 schrieb Sascha:

Die Zeile, die du da hast, ist nicht für den Fehler verantwortlich. Es sei denn, du hast eine Klasse erstellt, die "GameObject" heißt, was ich mal nicht hoffe.

Zusammengefasst:


// Geht:
var go = new GameObject("Test Object");

// Geht:
go.AddComponent<MyComponentType>();

// Geht nicht:
var myComponent = new MyComponentType();

 

Danke das hat die Lösung gebracht :)

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...

×
×
  • Create New...