- Home /
Adding a component in the editor with a script
I would like to use a script to add a MeshFilter and MeshRenderer to the gameObject so it will show up in the scene window. I put the code in OnEnable()
, my components show up once I hit play, but they I want them to be there so I can see them in the inspector and play with it, and even extend the editor to do so, but I am stuck.
Where should I place an AddComponent so that it will happen in the editor. Is something that must be done in an editor script?
Here's the code I've tried.
public class SimpleSprite : MonoBehaviour {
void OnEnable() {
if (gameObject.GetComponent<MeshFilter>() == null)
{
Mesh mesh = new Mesh();
mesh.name = gameObject.name;
gameObject.AddComponent<MeshFilter>().mesh = mesh;
}
else if (gameObject.GetComponent<MeshFilter>().sharedMesh == null)
{
Mesh mesh = new Mesh();
mesh.name = gameObject.name;
gameObject.GetComponent<MeshFilter>().mesh = mesh;
}
}
}
Write an editor script. While it's not strictly necessary to do so, as a general rule if you're doing something that modifies a system as a whole it should be done from outside the system- hence an editor script. I assume you want the changes to be serializable and thus saved with the scene?
Yes, making sure the changes I make are saved with the scene is important. I got it to work by adding the [ExecuteInEdit$$anonymous$$ode] attribute, but I don't know how it fits into best practices, if there are any :p If I use an editor script, when would be the best place to add a component and modify it? I don't want to have to check if the component exists every OnInspectorGui().
Your answer

Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Enemy prefab's script won't keep inspector-applied settings. 0 Answers
How to get variables of the script show in unity editor/inspector? 2 Answers
How do I pass a script via inspector reference? 1 Answer
How do i call a function in main script from editor script? 1 Answer