Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 kUr4m4 · Jan 22, 2014 at 03:49 PM · c#editorcustomcustom-inspector

editorguilayout.objectfield issue

I am trying to make a custom inspector where variables are displayed based on an enum. The first part I can get to work like a charm but I am having trouble displaying variables that are not available in EditorGUILayout.

For instance, I have this custom class:

 using UnityEngine;
 using System.Collections;
 
 [System.Serializable]
 public class MusicClip {
 
     public AudioClip clip;
     [HideInInspector]
     public int numberOfBeats;
     public int bpm = 120;
     public int numberOfLoops = 1;
     public bool narrator = false;
 }

The script im extending contains a variable of this type and I want it to be displayed in my custom editor, but only if a specific enum was selected.

These are the variables of the script im extending:

 public class ChallengeMarker : Marker, IDebugMonitor
 {
         // Marker to be reached in order to win
         public Marker goal;
 
         // Goal of challenge (other marker)
         public float timeLimit = 1;
 
         // Time limit of challenge in seconds
         public MusicClip introClip;
 
         // Clip to play in begining of challenge
         public MusicClip[] challengeLoopClips = new MusicClip[1];
 
         // Clip to play if win challenge
         public MusicClip successClip;
 
         // Clip to play if lose challenge
         public MusicClip failClip;
 
         public static ChallengeMarker currentChallenge;
 
 
         // What type of challenge is it?
         public ChallengeType challengeType = ChallengeType.SpeedUp;
 
         // Enum for state of the challenge
         public enum State
         {
                 AwaitingPlayer,
                 InProgress,
                 Succeeded,
                 Failed,
         }
 
         // Internal state
         [HideInInspector]
         public State state = State.AwaitingPlayer;
         // ### DEBUG MONITOR VARIBLES ###
         private float startTime, endTime, startDist, npcStartDist;
         private GameObject player;
         private bool hasEvaluated = false;
         private NPC npc;

Note that Marker extends Monobehaviour.

This is my editor extension:

     using UnityEngine;
     using UnityEditor;
     using System.Collections;
     
     [CustomEditor (typeof(ChallengeMarker))]
     public class ChallengeMarkerEditor : MarkerEditor
     {
             ChallengeMarker chal;
             SerializedObject obj;
             void OnEnable ()
             {
                     chal = (ChallengeMarker)target;
             }
             public override void OnInspectorGUI()
             {
                     chal.challengeType = (ChallengeType)EditorGUILayout.EnumPopup("Type of challenge",chal.challengeType);
             
                     switch(chal.challengeType)
                     {
                     case ChallengeType.SpeedUp:
                             // Expose variables here
                             break;
                     }
             
             
             }
     }

Now basically i'm clueless as to what I have to add in my switch in order to display a MusicClip variable. I have tried EditorGUILayout.propertyfield as well as EditorGUILayout.ObjectField without success. I'm pretty sure there is a way to do this? Any help is greatly appreciated!

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

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by kUr4m4 · Jan 23, 2014 at 08:35 AM

I managed to find the solution myself:

The problem was that the variable I was trying to expose in the editor has nested objects. Therefore, not only do you need to do:

 SerializedProperty prop = obj.FindProperty("successClip");
                         EditorGUILayout.PropertyField(prop);

To expose "successClip" but you also need to expose all the nested properties as such:

 if (prop.isExpanded) 
 {
     foreach (SerializedProperty p in prop)
         EditorGUILayout.PropertyField (p);
 }

This will then show the exposed property as well as all properties contained within itself.

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

19 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

Related Questions

Initialising List array for use in a custom Editor 1 Answer

How can I create a list of preset class/objects to be used in the editor 1 Answer

Create Spells through classes in custom editor? 1 Answer

How to create a lightweight Item/Mineral/etc System 1 Answer

Move scene camera to gameObject via Editor script 3 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