Я действительно не знаю Unity (никогда не использовал его), но это выглядит довольно просто.
Кажется, что метод EditorFieldForObject
принимает параметр второго типа, который обозначает, какие типы вы можете выбрать, используя поле вGUI - я не уверен, можете ли вы сделать это GameObject
или нет, но в принципе есть два подхода, которые должны работать:
Оставьте ваш код как есть и приведите объект (в OnGUI
метод):
var gameObject = workLight as GameObject;
if(gameObject == null)
{
ShowNotification(new GUIContent("No light selected"));
}
else
{
var light = gameObject.GetComponent<Light>();
if(light == null)
{
ShowNotification(new GUIContent("Selected object is not a light"));
return;
}
// Not sure if this is the correct way to disable a light but you can figure it out
light.enabled = false;
// or light.enabled = !light.enabled to toggle state
}
Другой способ - заставить окно GUI редактора искать экземпляры GameObject в первую очередь:
public GameObject workLight;
....
workLight = EditorGUILayout.ObjectField(workLight, typeof(GameObject), true);
Но я не уверен, возможно ли этоили нет (как я уже сказал, я не знаю Unity)
Редактировать: очевидно, вам нужно использовать GameObject.SetActive(boolean)
для переключения состояния объекта
Поскольку вы хотите переключаться, вы можете использовать поле GameObject.activeSelf
, которое дает вам активный флаг true / false для текущего объекта
Так что это должно работать:
light.SetActive(!light.activeSelf);