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.

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;
}