x


Using an Array of "MyClass" in EditorGUILayout.ObjectField ?

I'm having some trouble with this one!
First here's my Monobehavior class that's attached to my GameObject:

using UnityEngine;
using UnityEditor;
using System.Collections;

[ExecuteInEditMode]
public class ObjectAddOns : MonoBehaviour {

    private Transform t;
    public bool isObjectSlider;

    private ObjectSlider objectSlider;


    [System.Serializable]
    public class ObjectAddOn
    {
       public Transform addOn;
       public bool enabled;
       public ObjectAddOn( Transform addOn, bool enabled )
       {
         this.addOn = addOn;
         this.enabled = enabled;
       }
    }
    public ObjectAddOn[] objAddOns;


    #region Unity Functions
    // =================================== AWAKE FUNCTION =================================== //

    void Awake ()
    {
       if( !Application.isEditor )
         this.enabled = false;

       // Cache reference to the GameObject's Transform this script is attached to for speed
       t = this.transform;

       // Get the number of addOns attached to this GameObject
       int i = 1;
       foreach( Transform child in GetComponentsInChildren<Transform>() )
       {
         // Do NOT count the transform if it doesn't have a renderer attached
         if( child.renderer == null )

          continue;


         // Create array of addons
         objAddOns = new ObjectAddOn[i];
         i++;

       }

    }


    // =================================== START FUNCTION =================================== //
    void Start ()

    {
       // Check if ObjectSlider class is already attached
       objectSlider = GetComponent<ObjectSlider>();

       // Populate addOns array with every addOn found on GameObject
       int i = 0;
       foreach( Transform child in GetComponentsInChildren<Transform>() )
       {
         if( child.renderer == null )
          continue;

         objAddOns[i] = new ObjectAddOn( child, child.gameObject.active );
         i++;
       }

    }


    // =================================== UPDATE FUNCTION =================================== //

    void Update ()
    {
       // Add ObjectSlider class if enabled
       if( isObjectSlider && objectSlider == null )
       {
         gameObject.AddComponent<ObjectSlider>();
         objectSlider = GetComponent<ObjectSlider>();
       }
       else
       {
         if( objectSlider != null )
          DestroyImmediate( objectSlider );
       }


       // Turn addons off or on (remove from Update for final build)
       for( int i = 0; i < objAddOns.Length; i++ )
       {
         objAddOns[i].addOn.gameObject.SetActiveRecursively( objAddOns[i].enabled );
       }

    }
    #endregion
}

And here's the custom inspector class which extends it:

using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomEditor( typeof( ObjectAddOns ))]
public class ObjectAddOnsEditor : Editor {  

    private ObjectAddOns oa;


    #region Unity Functions
    // =================================== ONINSPECTORGUI FUNCTION =================================== //
    public override void OnInspectorGUI ()
    {
       oa = target as ObjectAddOns;
       for( int i = 0; i < oa.objAddOns.Length; i++ )
       {
         var t = oa.objAddOns[i];
         t = EditorGUILayout.ObjectField( t, typeof( ObjectAddOns.ObjectAddOn)) as ObjectAddOns.ObjectAddOn;
       }
    }
}

The code above throws an error saying "Cannot convert "ObjectAddOns.ObjectAddOn" to "Object". How come EditorGUILayout.ObjectField will take types like Transform or Vector3 but not a custom type like ObjectAddons.ObjectAddon?

Any help would be very helpful (duh) :) Thanks for your time, as always! Stephane

more ▼

asked Jan 31 '12 at 07:01 AM

ronronmx gravatar image

ronronmx
806 84 101 122

(comments are locked)
10|3000 characters needed characters left

0 answers: sort voted first
Be the first one to answer this question
toggle preview:

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

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x5099
x3699
x1679
x30

asked: Jan 31 '12 at 07:01 AM

Seen: 641 times

Last Updated: Feb 02 '12 at 11:19 PM