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 BenGuiden · Feb 09, 2020 at 06:45 PM · inspectoreditor-scriptingscriptableobjectserializedpropertyserializedobject

Replicate "Apply" and "Revert" button functionality in ScriptableObject Editor Inspector

I have ScriptableObject subclass assets that I want to edit in the inspector as usual, but I don't want my changes to the properties to be applied to the asset until I click an "Apply" button, much like how texture import settings are changed. I want this mainly because when the asset changes there's some processes that need to happen afterwards that can take a second or two, I don't want to call this process everytime a property is changed.

I thought that if I was to declare the serialsed properties outside the OnInspectorGUI scope that their values would stay persistent between frames, and I could then call serialsedObject.ApplyModifiedProperties after clicking the "Apply" button. Unfortunetly that hasn't been working as the properties need to be applied the same frame I think, or their values are reverted back.

 [CustomEditor(typeof(NounDefinition))]
 public class NounDefinitionInspector : Editor
 {                
          private static SerializedProperty m_NounDataProperty;
          private static SerializedProperty m_NameProperty;
 
          public override void OnInspectorGUI()
          {
                 EditorGUILayout.PropertyField(m_NameProperty);
                     
                 if (GUILayout.Button("Apply"))
                        ApplyChanges();
          }
 
          private void ApplyChanges()
          {
                 if (serializedObject.hasModifiedProperties)
                        serializedObject.ApplyModifiedPropertiesWithoutUndo();
          }
 
          private void OnEnable()
          {
                 m_NounDataProperty = serializedObject.FindProperty("m_NounData");
                 m_NameProperty = m_NounDataProperty.FindPropertyRelative("m_Name");
          }
 }

Would anyone have any idea of how to achieve the result I'm looking for?

I've looked in TextureInspector.cs source code in the UnityCsReference but I can't find anything to do with applying the properties afterwards.

Thank you for any help!

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

2 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by Bunderant · Mar 02, 2020 at 09:35 AM

@BenGuiden Check out the docs for Scripted Importers (with examples). Technically it's "experimental" API, but it's been around awhile and I've had good experiences with it. By subclassing ScriptedImporterEditor, you'll have Apply/Revert functionality and buttons, and they worked out of the box just as I'd expected. If you want, you can even override the protected Apply() and ResetValues() methods to customize the behavior.


As far as I know, though, ScriptedImporter works based on your file extension. I have a GitHub gist available with a simple example of how to create ScriptableObject subclasses with custom extensions straight from the Create menu.

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
avatar image
0

Answer by BenGuiden · Mar 24, 2020 at 09:27 PM

That's fantastic @Bunderant thanks a million!

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

136 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 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

Unity inspector scripting - scriptable objects - card game 0 Answers

Change the fields on a object bound to a SerializedProperty via custom inspector? 1 Answer

Cannot convert serializedObject to float 1 Answer

How to work with custom class (ScriptableObject) SerializedProperty? 1 Answer

Error when trying to Serialize a field that is in a class 0 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