- Home /
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
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Setting Scroll View Width GUILayout 1 Answer
How to make an GUILayout.Window draggable ? 3 Answers
How can I make a custom Time Range Selector (with sliders)? 1 Answer
How do I implement Draggable Properties with custom Labels in Editor or PropertyDrawer? 1 Answer