- Home /
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!
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.
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                