Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
  • Help Room /
avatar image
0
Question by brazmogu · Aug 11, 2017 at 01:43 AM · not workingnullpropertydrawercustom-editor

Custom Property Drawer never sets the property

So, I'm making a custom property drawer for one class, in order to set and manipulate its values in a comprehensive way. Also, because Unity does not provide any way of serializing Hashtables. I create a PropertyDrawer class and set it up like this:

 [CustomPropertyDrawer(typeof(TrackFragment.NextList))]
 public class SegmentProbabilityEditor: PropertyDrawer {
     
     GameObject newTrack;
     float newOdds;
 
     public override void OnGUI(Rect pos, SerializedProperty property, GUIContent label) {
         TrackFragment.NextList nextList = (TrackFragment.NextList) property.objectReferenceValue;
         if (nextList == null) {
             nextList = new TrackFragment.NextList();
         }

         //Lots of stuff here to draw the current value of the property
         [...]
 
         //New Entry
         trackPos.y += 0.5f * lineH;
 
         newTrack = (GameObject) EditorGUI.ObjectField(trackPos, newTrack, typeof(GameObject), false);
         newOdds = 0f;
         EditorGUI.indentLevel = originalIndent;
         EditorGUI.EndProperty();
 
         if (GUI.changed) {
             Debug.Log("Ch-ch-ch-changes!");
             Debug.Log(newTrack);
 
             //Add new item!
             if (newTrack != null)
             {
                 TrackFragment nextFrag = newTrack.GetComponent<TrackFragment>();
 
                 if (nextFrag != null) {
                     nextList.Set(nextFrag, 0f);
                 }
                 else
                 {
                     Debug.LogWarning(string.Format("Selected object({0}) has no Track Fragment component!", newTrack.name));
                 }
 
                 Debug.Log(nextList.Length());
                 property.objectReferenceValue = nextList;
                 newTrack = null;
 
 
                 property.serializedObject.Update();
                 property.serializedObject.ApplyModifiedProperties();
             }
         }
     }

     //Other functions like GetPropertyHeight
     [...]
 }

At the top i'm constructing a new object in case the current value comes up null (it always does), then draw the current state of the property, then one field that should be used to add new values into it, and finally the GUI.changed block that adds the new value to the property.

At first sight it works, the nextList variable has the new value added, the Debug log there prints (1). Then the final lines should be updating the value, but they aren't. The value of the property always comes up null again at the beginning of OnGUI. The inspector box looks fine:

Custom Property Drawer in the inspector box for the NextFragment class: OK

But it never changes. I've been looking everywhere about how to do it, but none of the solutions are working. Anyone has any idea of what could be the problem?

UPDATE: I've also tried accessing property.serializedObject.targetObject, and the same is happening(the child object is null at the end of the function), and I'm starting to suspect it might be because I'm using a Hashtable in there. Is that a clue?

screenshot-from-2017-08-10-22-40-19.png (11.7 kB)
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

0 Replies

· Add your reply
  • Sort: 

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

111 People are following this question.

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

Related Questions

Why am I getting this error with my BannerAD (Admob) 1 Answer

What does the NullReferenceException mean? and just how do I fix this problem? 0 Answers

fbx exporter 3.20 does not export model [error message; cannot be null] 0 Answers

Why doesn't it work? 0 Answers

Where is the () and + list, in onclick, in the Button UI 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