• 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
Question by Muit · Feb 27, 2016 at 10:43 PM · editoreditor-scriptingserializationpropertydrawerserialize

SerializedProperty with children class fields

 public class MyClass {
     public string name;
 }
 
 public class MyChildrenClass : MyClass {
     public int live  = 10;
 }
 
 public class MyObject : ScriptableObject {
     public MyClass myClass = new MyChildrenClass();
 }

How can I get the MyChildrenClass properties form the SerializedProperty?

 SerializedObject object = new SerializedObject(new MyObject());
 SerializedProperty myClassSerialized = object.FindProperty("myClass");
 
 //Doesnt get live property becouse it's interpretated as "MyClass"
 SerializedProperty m_live = myClassSerialized.FindPropertyRelative("live");







Comment
luislodosm

People who like this

1 Show 0
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

2 Replies

· Add your reply
  • Sort: 
avatar image

Answer by deedilus · Jul 06, 2017 at 10:31 AM

You can iterate through child props of serialised classes by using an enumerator. You can do this a couple different ways, one being using GetEnumerator:

 var childEnum = serializedObject.FindProperty("myClass").GetEnumerator();
 while (childEnum.MoveNext())
 {
     var current = childEnum.Current as SerializedProperty;
     if (current.name == "live")
     {
         // Do things
     }
 }

Or you can use Next or NextVisible with the enterChildren argument set to true:

 var myClassProps = serializedObject.FindProperty("myClass");
 while (myClassProps.NextVisible(true))
 {
     if (myClassProps.name == "live")
     {
         // Do things
     }
 }

Comment
AdmiralThrawn
RunninglVlan

People who like this

2 Show 0 · 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

Answer by l8huang · Feb 20, 2018 at 02:32 AM

You can use property.GetEndProperty() and SerializedProperty.EqualContents():

             public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
             {
                 var endProperty = property.GetEndProperty();
                 while (property.NextVisible(true))
                 {
                     if (SerializedProperty.EqualContents(property, endProperty))
                     {
                         break;
                     }
                    ...

     
    

Comment

People who like this

0 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 cloui · Mar 12, 2019 at 09:34 PM 0
Share

Hello.

I am on unity 2018.3

these solutions don't work in public override void OnInspectorGUI() {} Any ideas for using in a custom inspector,Hello, I am trying both of these solutions and they do not work. Any ideas?

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

6 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Trouble setting the object reference in a property drawer 0 Answers

Got a Problem when serializing Class Dictionary with Custom Editor 1 Answer

Storing data about an asset only in the editor 2 Answers

Help with Missing Monobehaviours and Asset Serialization? 0 Answers

GameObject HideFlags.DontSave not working as expected 1 Answer


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