- Home /
Question by
SmooveB · Jun 26, 2012 at 10:50 PM ·
c#custom editoreditorguilayoutserializedproperty
serializedObject with EditorGUILayout.Popup in C#
Trying to do simple custom editor stuff just like the example shown here but it does not work in C# because a SerializedProperty (test1) will not work as a parameter for EditorGUILayout.Popup. It needs an int. How can I make this work for C#?
using UnityEngine;
using UnityEditor;
using System.Collections;
[CustomEditor(typeof(Uni))]
[CanEditMultipleObjects]
public class DropDownMenu : Editor {
SerializedProperty test1;
public void OnEnable(){
test1 = serializedObject.FindProperty("test1");
}
public override void OnInspectorGUI(){
serializedObject.Update ();
EditorGUILayout.Popup(test1, uniEd.objectNames);
serializedObject.ApplyModifiedProperties ();
}
}
Comment
Best Answer
Answer by SmooveB · Jun 28, 2012 at 06:41 PM
Okay, I figured it out. It should look like this:
using UnityEngine;
using UnityEditor;
using System.Collections;
[CanEditMultipleObjects]
[CustomEditor(typeof(Uni))]
public class DropDownMenu: Editor {
SerializedObject uniEd; //whoops I need the serialized object to begin with, this got deleted from the first post by accident
SerializedProperty test1;
string[] junk = {"things","stuff","whatever"};//if you wanted to get the string from the target (the script you are trying to modify) then just make another serilized property and use stringValue (see below)
void OnEnable()
{
uniEd = new SerializedObject(target);// target is the object that you are trying to make editor changes for. In this case Uni.
test1 = uniEd.FindProperty("test1");
}
public override void OnInspectorGUI () {
uniEd.Update();//this and the apply modified properties are what actualy sends the data (test1) back to the target script, so we use the actual serialized object that we got from target above
test1.intValue = EditorGUILayout.Popup("Enemy",test1.intValue,junk);//we have to use the .intValue wich is a member of SerializedProperty. If we were using UnityScript, we might not have to do this, but C# is strongly typed.
// Also, we have to set the test1 on the left because that is just how .Popup works. It uses the int value to set what is selected, but only changes that value by returning the selected value.
uniEd.ApplyModifiedProperties();
}
}
You get a variable called serializedObject from the parent class Editor which saves you the trouble of uniEd = new SerializedObject(target);
Your answer
Follow this Question
Related Questions
Property Drawer SerializedProperty is null 2 Answers
Popup options not changing in custom editor script 0 Answers
How to create a new SerializedProperty? 0 Answers
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers