Hello, I’ve made some classes as follows:
public abstract class Item : MonoBehaviour
public abstract class HeldItem : Item
public class Weapon : HeldItem
public class Axe : Weapon
public class Sword : Weapon
public class Shield : HeldItem
I have made a custom editor as follows:
[CustomEditor(typeof(Item))]//customizes the item class in the inspector
public class itemCustomInspector : Editor
{
private PrefabManager pfManager;
bool heldFoldout;
public override void OnInspectorGUI()
{
EditorGUI.BeginChangeCheck();
Item itemScript = (Item)target;
itemScript.itemType = (itemTypes)EditorGUILayout.EnumPopup("Item Type:", itemScript.itemType);
itemScript.friendlyName = EditorGUILayout.TextField("Friendly Name:", itemScript.friendlyName);
itemScript.description = EditorGUILayout.TextField("Description:", itemScript.description);
itemScript.icon = (Sprite)EditorGUILayout.ObjectField("Icon", itemScript.icon, typeof(Sprite), allowSceneObjects: false);
#region prefab selection
pfManager = GameObject.Find("GameManager").GetComponent<PrefabManager>();
if (pfManager)
{
string[] pfabNamesArray = new string[pfManager.prefabs.Count];
short i = 0;
foreach (PrefabManager.prefab pfab in pfManager.prefabs)
{
pfabNamesArray *= pfab.prefabName;*
i++;
}
int prefabSelectionIndex = System.Array.IndexOf(pfabNamesArray, itemScript.prefabName);
EditorGUILayout.LabelField(“Prefab Manager Prefab Name:”);
prefabSelectionIndex = EditorGUILayout.Popup(prefabSelectionIndex, pfabNamesArray);
itemScript.prefabName = pfabNamesArray[prefabSelectionIndex];
}
else //if prefab manager can’t be located, insert a text field to still allow prefab selection
{
itemScript.prefabName = EditorGUILayout.TextField(new GUIContent(“Prefab Name:”, “The name of the item exactly as listed in the prefab manager. Used for loading inventory from save.”), itemScript.prefabName);
}
#endregion
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, “Changed Item Properties”);
EditorUtility.SetDirty(itemScript);
UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(itemScript.gameObject.scene);
}
}
}
*/
#endregion
My question is, how can I set up my custom editor script so that anything inheriting the “Item” class is affected by the custom editor, even future classes that I may not know about yet that someone else may create? Right now, in the editor, if I put in an axe, sword, etc., it doesn’t inherit the editor as I hoped it would.