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
1
Question by Vifi · May 29, 2018 at 07:24 AM · c#scriptableobjectcustom editor

Draw scriptable object "inspector" in custom window (EditorWindow)

Hi, i am writting something like group of settings for my project. Settings are stored in scriptableObjects. I want to achive custom window with some kind of choose structure (popup. listbox or something). Options in that choose structure will be names of scriptableObjects. After choosing one of them their "inspector" shows up below (just like in normal inspector). I did small research but i can't make them draw inspector with OnInspectorGUI and DrawDefaultInspector methods. So far i got this:

 private void OnGUI()
         {
             var scriptableObjects = Resources.LoadAll<ScriptableObject>("Data/");
             var options = createOptions(scriptableObjects); //takes names of found scriptableObjects and add them to options for popup
             GUILayout.Label("Found " + scriptableObjects.Length.ToString() + " scriptable objects", EditorStyles.boldLabel);
             EditorGUI.BeginChangeCheck();
             index = EditorGUILayout.Popup(index, options);
     
             if (EditorGUI.EndChangeCheck())
             {
                 var editor = Editor.CreateEditor(scriptableObjects[index]);
                 //editor.OnInspectorGUI();
                 editor.DrawDefaultInspector();
             }
         }



Comment
Add comment · Show 7
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 NoDumbQuestion · May 29, 2018 at 09:19 AM 0
Share

OnGui not work with EditorWindows. OnGui only work with Object that exist in scene not outside.

Go back to Custom Editor with OnInspectorGUI()

avatar image Vifi · May 29, 2018 at 09:56 AM 0
Share

Hmmm... i don't quite understand. You are saying it is impossible to show default inspector of scriptable object in custom window (EditorWindows)? What do you mean about going back to Custom Editor with OnInspectorGUI? Sorry for mental impairment ;p

avatar image NoDumbQuestion Vifi · May 29, 2018 at 09:59 AM 0
Share

private void OnGUI() not work with EditorWindow. It show nothing because OnGUI only show when an object with that script was selected in SCENE

avatar image Vifi NoDumbQuestion · May 29, 2018 at 10:13 AM 0
Share

Well, that one i understood... So is there any direction i can go to solve it?

Show more comments
avatar image Syganek · Jun 11, 2018 at 12:41 PM 1
Share

@NoDumbQuestion you're wrong. OnGUI works with EditorWindow. You want OnInspectorGUI when writing custom Editors for ScriptableObjects. Please check docs before writing such answers.

https://docs.unity3d.com/ScriptReference/EditorWindow.OnGUI.html

I checked in my project and editor.OnInspectorGUI should work. Are you sure that your list of scriptable objects is not null? I'll try to look it up some more later if you still haven't figured it out.

avatar image NoDumbQuestion Syganek · Jun 11, 2018 at 12:45 PM 0
Share

Hum you are right. I think mistook OnGUI with GUI draw on SceneView made by custom editor.

Well I guess I tend to make simple stuff complicated

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by Bunny83 · Jun 11, 2018 at 01:03 PM

This makes no sense:

 if (EditorGUI.EndChangeCheck())
 {
     var editor = Editor.CreateEditor(scriptableObjects[index]);
     editor.OnInspectorGUI();
 }

As the IMGUI system is an immediate mode GUI system. The EndChangeCheck will only be true when a change has happend. Changes can only happen during input events. That means your editor will never receive any repaint events. You have to move it outside of that if statement.


Next thing is calling DrawDefaultInspector would be kind of pointless if you have an actual custom editor for your scriptableobject.


Finally you should not use CreateEditor that way. A custom editor is also a scriptableobject. When you create one you have to destroy it as well. That's why we have the various cached versions like "Editor.CreateCachedEditor". You should store the current editor in a member variable of your editor window. The CreateCachedEditor method will determine if it's necessary to create a new editor or if it can just use the current one. If a new editor is created the old one will be destroyed.


You should not to heavy unnecessary stuff inside OnGUI of an EditorWindow. It may slow down your whole editor. Things like "Resources.LoadAll" should be done in OnEnable and you may want to provide an Update button to call it on demand. If you don't want the manual update you could use the "OnFocus" callback or "OnProjectChange". Though OnFocus would make more sense. The number of scriptableobjects could only be changed when the window does not have the focus (when the user creates new objects in the project panel). So when the usercomes back to the editor window it will update the list of objects once.


Finally be careful when using Popup. It shows a native context menu. If you have really a lot of objects to choose from it would be better to use other methods for selecting the current object.

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

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

CustomEditor for an ScriptableObject asset only works after recompile. 1 Answer

ScriptableObjects lists (from the same script) open simultaneously in custom window 0 Answers

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Serializing a ScriptableObject without creating an asset for it? 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