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 /
avatar image
0
Question by Melodatron · Mar 23, 2016 at 01:02 PM · custom editorserializedpropertyserializedobject

Incrementing a SerializedProperty on a per-object basis

Understanding that using Editor.targets is becoming more and more difficult as a result of Editor.SetDirty() becoming more or less unusable, I'm looking to the "correct" solution to the following problem.

I create a component (ExampleComponent) with an integer variable (exampleInt). I want to create a CustomEditor that has displays a button that increases the exampleInt by one on a per-object basis. (Essentially ++exampleInt.)

What I don't understand is how to do this correctly using the "new and improved" Editor.serializedObject. As I understand it, SerializedObject.targetObjects returns a read-only list of the target objects, and thus is not intended to be edited? And as far as I can tell there's no way of getting/setting the individual values of SerializedProperty either?

Comment
Add comment · Show 1
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 Melodatron · Mar 22, 2016 at 04:38 AM 0
Share

So one following solution would be:

 if (intProp.has$$anonymous$$ultipleDifferentValues)
 {
    EditorGUI.show$$anonymous$$ixedValue = true;
    foreach (UnityEngine.Object o in intProp.serializedObject.targetObjects)
    {
       SerializedObject so = new SerializedObject(o);
       so.Update();
       SerializedProperty so_intProp = so.FindProperty(intProp.name);
       so_intProp.intValue += 1; 
       so.Apply$$anonymous$$odifiedProperties();
    }
 }

Isn't that essentially breaking the concept of the targetObjects being read-only, and a weird workaround to a simple problem?

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by dCalle · Jun 10, 2017 at 10:33 AM

You can set values of a serialized property.

Either by using EditorGUILayout.PropertyField or,

if you know which field of an object you want to change you can use serializedProperty.objectReferenceValue = ObjectField(serializedProperty.objectReferenceValue) (as for GameObjects and ScriptableObjects).

The only Pain in the Ass right now is, to figure out with what Type you are dealing with right now, when using the Iterator given by the serializedObject.GetIterator() of your Editor.

Remember though, that you need to use serializedObject.ApplyModifiedProperties() command of your Editor to apply changes.

Comment
Add comment · 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

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Finding property with serializedObject on script with a generic 0 Answers

Calling a method on a serialized property (Custom Editor with Reorderable List) 0 Answers

Serializedproperty assignment 2 Answers

How to make a custom class that is serializable and works in a custom editor gui array which imitates the real inspector array? 0 Answers

Property Drawer SerializedProperty is null 2 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