- Home /
The question is answered, right answer was accepted
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.
Answer by Bunny83 · Aug 03, 2016 at 12:17 AM
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;
}
Follow this Question
Related Questions
Why does my class script not recognize variables in its own instance? 1 Answer
How to add new instance of a script to a game object? 2 Answers
How to access an instance of a class when the class isn't known 2 Answers
How to add items (or players) to the scene from classes? 1 Answer
Component or Independent class 1 Answer