UIGU源码分析5:Button

源码5:Button

前面讲了Selectable的作用 和相关的操作。在UGUI里很多UI控件都是继承Selectable的:Button DropDown Scrollbar Slider Toggle 。 这里就以Button为准分析一下

public class Button : Selectable, IPointerClickHandler, ISubmitHandler
{
    [Serializable]
    /// <summary>
    /// Function definition for a button click event.
    /// </summary>
    public class ButtonClickedEvent : UnityEvent {}

    // Event delegates triggered on click.
    [FormerlySerializedAs("onClick")]
    [SerializeField]
    private ButtonClickedEvent m_OnClick = new ButtonClickedEvent();

    protected Button()
    {}
    
    ...
 }

Button 除了继承Selectable 还继承了IPointerClickHandler ISubmitHandler

还定义了一个UnityEvent类型的事件onClick事件

onClick事件可以通过onClick.AddListener方法,添加用户自定义的监听

   public virtual void OnPointerClick(PointerEventData eventData)
        {
            if (eventData.button != PointerEventData.InputButton.Left)
                return;

            Press();
        }
 private void Press()
    {
        if (!IsActive() || !IsInteractable())
            return;

        UISystemProfilerApi.AddMarker("Button.onClick", this);
        m_OnClick.Invoke();
    }

OnPointerClick方法,会通过Press方法回调onClick。

 public virtual void OnSubmit(BaseEventData eventData)
    {
        Press();

        // if we get set disabled during the press
        // don't run the coroutine.
        if (!IsActive() || !IsInteractable())
            return;

        DoStateTransition(SelectionState.Pressed, false);
        StartCoroutine(OnFinishSubmit());
    }

    private IEnumerator OnFinishSubmit()
    {
        var fadeTime = colors.fadeDuration;
        var elapsedTime = 0f;

        while (elapsedTime < fadeTime)
        {
            elapsedTime += Time.unscaledDeltaTime;
            yield return null;
        }

        DoStateTransition(currentSelectionState, false);
    }

OnSubmit 主要是为了响应像是键盘等回车输入 模拟点击确认等作用 C上也可以在Edit->Project->Input里设置Submit键。

当按下Submit键的时候就会触发OnSubmit方法。因为Selectable上并没有Submit 相关对应的状态

所以这里设置为Pressed 状态 进行Trasition

OnFinishSubmit 就是将状态重置

可以看出Button就是相对于Selectable添加了响应点击和确认事件的接口,并且开放了可添加用户自定义监听的onClick事件。

猜你喜欢

转载自blog.csdn.net/NippyLi/article/details/123302422