DrawPropertiesExluding for non Monobehaviour classes?

Having an error trying to assign classAbilities from target under OnInspectorGUI(). Error is cannot convert ClassAbilities to UnityEngine.Object. I realize it’s because ClassAbilities doesn’t inherit Monobehaviour, but I haven’t been able to find a solution for this.

[CustomEditor(typeof(ClassAbilities))]
public class ClassAbilitiesEditor : Editor
{
    public override void OnInspectorGUI()
    {
        ClassAbilities classAbilities = target as ClassAbilities;
        List<string> excludedProperties = new List<string>();

        if (!classAbilities.CanUse)
            excludedProperties.Add("_abilities");

        if (excludedProperties.Count > 0)
            DrawPropertiesExcluding(serializedObject, excludedProperties.ToArray());
        else
            DrawDefaultInspector();

        ProcessChanges(classAbilities);
    }
}
using System.Collections.Generic;
using UnityEngine;

namespace FirstGearGames.MOBAROyale.Abilities
{
    [System.Serializable]
    public class ClassAbilities
    {
        /// <summary>
        /// Use CanUse.
        /// </summary>
        [Tooltip("True if the unit can use this weapon in the specified HandPlacements.")]
        [SerializeField]
        private bool _canUse = true;
        /// <summary>
        /// True if the unit can use this weapon in the specified HandPlacements.
        /// </summary>
        public bool CanUse { get { return _canUse; } }
        /// <summary>
        /// Use Abilities.
        /// </summary>
        [Tooltip("Abilities for the UnitClass using this weapon.")]
        [SerializeField]
        private List<Ability> _abilities = new List<Ability>();
        /// <summary>
        /// Abilities for the UnitClass using this weapon.
        /// </summary>
        public List<Ability> Abilities { get { return _abilities; } }
    }


}

As non-MonoBehaviour/SO classes aren’t ever given an editor of their own, having an editor class for one doesn’t make much sense. If your ClassAbilities class is meant to be a property in another SO or MonoBehaviour, you want to use a PropertyDrawer instead.

2 Likes

This was helpful, thank you.