Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
3
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
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
3
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();
     }
         
     
         
         
 
 }
Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image MrPhil · Jun 24, 2013 at 09:04 PM 2
Share

You get a variable called serializedObject from the parent class Editor which saves you the trouble of uniEd = new SerializedObject(target);

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges