- Home /
Enumerations in custom inspector C#
Hi again. I am trying to make a custom inspector, and it is working so far, it has three strings and one enum, but no matter what I do, the enum refuses to work and gives me this error:
Assets/Editor/ItemRegistryEditor.cs(25,17): error CS0266: Cannot implicitly convert type `System.Enum' to `ItemRegistryEditor.Editortype'. An explicit conversion exists (are you missing a cast?)
Here is my code:
using UnityEngine;
using System.Collections;
using UnityEditor;
[CustomEditor(typeof(ItemRegistry))]
public class ItemRegistryEditor : Editor
{
public enum Editortype{Normal, Armour, Weapon, Food};
public string EditorItemName;
public string EditorItemLore;
public Editortype EditorItemType;
public bool EditorExtraInfo;
public string EditorItemPickupName;
public override void OnInspectorGUI()
{
ItemRegistry itemRegistryScript = (ItemRegistry)target;
EditorGUILayout.LabelField("Required Settings", EditorStyles.boldLabel);
EditorItemName = EditorGUILayout.TextField("Item Name", EditorItemName);
EditorGUILayout.LabelField("Item ID", itemRegistryScript.ItemID.ToString());
EditorItemType = EditorGUILayout.EnumPopup("Item Type", EditorItemType);
EditorExtraInfo = EditorGUILayout.BeginToggleGroup("Optional Settings", EditorExtraInfo);
EditorItemLore = EditorGUILayout.TextField("Item Lore", EditorItemLore);
EditorItemPickupName = EditorGUILayout.TextField("Item Pickup Name", EditorItemPickupName);
if(GUILayout.Button("Create Item Using These Settings"))
{
Debug.Log(EditorItemName);
Debug.Log(EditorItemLore);
Debug.Log(EditorItemPickupName);
}
}
}
Possible duplicate of http://answers.unity3d.com/questions/726010/type-cast-to-a-enum.html
Answer by Bilelmnasser · Jun 07, 2014 at 11:45 AM
this is your error :
EditorGUILayout.EnumPopup---------> return a System.enum in line 25 you try to cast the returned result from this method(EditorGUILayout.EnumPopup()) which is a System.enum and you affect her to(EditorItemType wich is Editortype type). hope you see what to do next
Answer by Techn0man · Feb 18, 2018 at 12:59 PM
you have to give it a cast. there are two ways of doing it. here they are.
#variable# = (#your enum#)#function#;
or you can do
#variable# = #function# as #your enum#;
this also works with scripts, structs, float, bool, int and so on
While it is true that you need to cast the return type, you have to be careful with "as" casts. They do not work with value types. Since enums are value types (by default just an int value) you can not use an as-cast. You would get a compiler error. Also an as-cast should only be used when you want to do a null check afterwards anyways.