检查器中脚本中的设置按钮

问题描述

我正在尝试在UnityEngine上创建一个RTS。像帝国时代系列一样,屏幕底部一个菜单,该菜单取决于您选择的对象。 因此,我创建了一个SObject类(用于可选对象),所有对象都从该类继承。例如,有一个类SHarvester,一个类SAnimals等。类SObject具有一个属性

[Serializefield]
private List<UnityAction> m_buttonCreation = new List<UnityAction>();

此列表包含特定于对象的方法,这些方法链接到屏幕底部菜单的按钮。

Buttons which will be linked to a method defined by the List above

如果您从脚本中定义了列表,那么一切都将正常工作。

但是我想在编辑器中使用单元或建筑物的预制件,并直接从检查器定义方法列表。但是unityAction类型不会显示在检查器中。

是否可以在检查器中显示UnityAction类型?类似于按钮组件:

UnityAction serialized field in button component

如果我不清楚自己的意思,我深表歉意。

解决方法

如果您不坚持使用UnityAction,则可以使用:

[SerializeField]
List<UnityEvent> m_buttonCreation = new List<UnityEvent>();

哪个会出现在您的检查器中 enter image description here

默认的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();
        }
    }
}

当然UnityEventUnityAction一起使用,所以恕我直言,您应该将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);
}