- Home /
EditorGUI how does it work?
Hi,
How does the scripting for Editor work? I heard something about Serialized things?
What I want to do is to drag a script on the inspector and there under script title there is a button that you can press just an easy question. How to do a button in the inspector?
Answer by ScroodgeM · Aug 03, 2012 at 04:17 PM
example. we have a simple bullet script. this script instantiating the bullet from attached prefab and gives it a start speed using rigidbody.
Bullet.cs
using UnityEngine; using System.Collections; public class Bullet : MonoBehaviour { public GameObject bulletGameObject; void Start() { if (bulletGameObject.rigidbody) { GameObject newBullet = Instantiate(bulletGameObject) as GameObject; newBullet.rigidbody.velocity = newBullet.transform.forward * 10f; } } }
now, let's make a custom editor, that draws a default field to select prefab, and also draws a info message - no object at all (error type), object exists but no rigidbody (error type) or just info that it's ok (info type). also, if object exists but have no rigidbody, draw a button to add rigidbody. and of course, pressing the button will add rigidbody to selected gaeobject.
BulletInspector.cs
using UnityEngine; using UnityEditor; using System.Collections; using System.Collections.Generic; [CustomEditor(typeof(Bullet))] public class BulletInspector : Editor { public override void OnInspectorGUI() { Bullet b = (Bullet)target; b.bulletGameObject = EditorGUILayout.ObjectField("bullet GO", b.bulletGameObject, typeof(GameObject), true) as GameObject; if (b.bulletGameObject) { if (!b.bulletGameObject.rigidbody) { GUI.color = new Color(1f, 0.5f, 0.5f, 1f); EditorGUILayout.HelpBox("object must have a rigidbody component", MessageType.Error, true); if (GUILayout.Button("add rigidbody to selected object")) { b.bulletGameObject.AddComponent(); } } else { GUI.color = new Color(0.5f, 1f, 0.5f, 1f); EditorGUILayout.HelpBox("object have a rigidbody component", MessageType.Info, true); }
}
else
{
GUI.color = new Color(0.5f, 0.5f, 1f, 1f);
EditorGUILayout.HelpBox("no object selected", MessageType.Error, true);
}
GUI.color = Color.white;
}
}
important
don't forget to place editor script in "Editor" folder
Answer by Ludeme Games · Aug 03, 2012 at 12:20 PM
There was a session at Unite 11 called "Intro to Editor Scripting". You watch it here.
No, it's working great, are you sure you have the newest flashplayer installed? It's also possible that your browser is too old.
Your answer
Follow this Question
Related Questions
Lining up GUI 1 Answer
Initialising List array for use in a custom Editor 1 Answer
Assign gradient color to GUI button 1 Answer
Editor Window Views 0 Answers
What is the name of the guistyle to draw the preview buttons? 1 Answer