Add an instance of a script as a component?

Hello. OK… let’s say I have a script “Colors”.

using UnityEngine;
using System.Collections;

    public class Colors : MonoBehaviour {
       public Color r, g, b;
    }

And then in another script I do:

using UnityEngine;
using System.Collections;

public class ColorsPartTwo : MonoBehaviour {
   void Start () {
      Colors c = new Colors();
      c.r = Color.red;
      c.g = Color.green;
      c.b = Color.blue;

      gameObject.AddComponent<Colors>( c );

   }
}

What I’m trying to say is that can I create an instance of a class in a script and then add that newly created instance as a component.

I am a aware of: Example e = gameObject.AddComponent<Example>() as Example; and all the other ways of adding a component as seen here. But I just wanted to know if I could it this way as well… or something along those lines… Thanks in advance.

1 Answer

1

No, you can’t. MonoBehaviours are components. Components can’t be created with “new”. Also Component instances can’t change their “owner”. The have to be created on a gameobject and can’t leave it. To get rid of a component your only option is to destroy it.

If you create a component with “new” you should receive a warning that you shouldn’t do that. Even the managed class is created, the native c++ part is missing. You have to use AddComponent to create an instance:

void Start () {
   Colors c = gameObject.AddComponent<Colors>();
   c.r = Color.red;
   c.g = Color.green;
   c.b = Color.blue;
}