问题描述
我正在尝试在UnityEngine上创建一个RTS。像帝国时代系列一样,屏幕底部有一个菜单,该菜单取决于您选择的对象。 因此,我创建了一个SObject类(用于可选对象),所有对象都从该类继承。例如,有一个类SHarvester,一个类SAnimals等。类SObject具有一个属性:
[Serializefield]
private List<UnityAction> m_buttonCreation = new List<UnityAction>();
此列表包含特定于对象的方法,这些方法将链接到屏幕底部菜单的按钮。
如果您从脚本中定义了列表,那么一切都将正常工作。
但是我想在编辑器中使用单元或建筑物的预制件,并直接从检查器定义方法列表。但是unityAction类型不会显示在检查器中。
是否可以在检查器中显示UnityAction类型?类似于按钮组件:
如果我不清楚自己的意思,我深表歉意。
解决方法
如果您不坚持使用UnityAction
,则可以使用:
[SerializeField]
List<UnityEvent> m_buttonCreation = new List<UnityEvent>();
默认的UnityButton组件有UnityEvent
个而不是UnityAction
:
Button.cs
namespace UnityEngine.UI
{
[AddComponentMenu("UI/Button",30)]
public class Button : Selectable,IPointerClickHandler,IEventSystemHandler,ISubmitHandler
{
protected Button();
public ButtonClickedEvent onClick { get; set; }
public virtual void OnPointerClick(PointerEventData eventData);
public virtual void OnSubmit(BaseEventData eventData);
public class ButtonClickedEvent : UnityEvent
{
public ButtonClickedEvent();
}
}
}
当然UnityEvent
与UnityAction
一起使用,所以恕我直言,您应该将Action更改为Event。
UnityEvent.cs
public class UnityEvent : UnityEventBase
{
[RequiredByNativeCode]
public UnityEvent();
// This is what runs when you click on the (+) sign
public void AddListener(UnityAction call);
public void Invoke();
// This is what runs when you click on the (-) sign
public void RemoveListener(UnityAction call);
protected override MethodInfo FindMethod_Impl(string name,object targetObj);
}