Unity_UGUI_Buton底层探究

版权声明:转载 请说明 出处 https://blog.csdn.net/qq2512667/article/details/88544217

最近换了公司(仍然是实习狗),坐标在上海, 楼上是Unity总部。很开心~~
上海和广东差别 并不是很大。就是天气比较冷,口味偏甜, 这家公司是创业公司,做教育类应用的, VR/AR MR 等, 第一天 就要上手SDK,也不是很难,Zspace的 相对VRTK来说 比较 简单,开发工程中遇到Button交互,所以要对它进行 重写,设备是 用射线进行 探测,
其实 重写Button也比较简单,也可以不用重写, 但还是建议重写会比较好。
之前有写过射线交互的例子
https://blog.csdn.net/qq2512667/article/details/79493117
https://blog.csdn.net/qq2512667/article/details/79842850
原理都差不多的, 射线交互 现在用的挺多的,NGUI 用的就是射线探测,但UGUI不是,是根据坐标去判断的·。

Button
Button 继承自 Selectable
官方源码

在这里插入图片描述
FormerlySerializedAs( "“onClick”)
ButtonClickEvent m_Onclick 这个特性就是备胎特性,当Onclick被删除
后, Onlickx序列化后就存在 m_Onclick 中

DoStateTransition(currentSelectionState, false);
DoStateTransition
这个 方法 比较重要,就是设置Button的交互转换状态,在重写的时候。需要用到这个方法。

这个方法就是转换 Button的状态

Selectable这个类 继承 UIBehaviour
在这里插入图片描述

重写思路,射线分为 射线进入, 射线停留,射线离开

因此 写3个方法 就可以了

public class RayButton : Button
{

    public UnityEngine.Events.UnityEvent MenuUIEvent;
    /// <summary>
    ///  视线进入 
    /// </summary>
    public virtual void RayEneter()
    {
        DoStateTransition(SelectionState.Highlighted, false);
    }
    /// <summary>
    /// 视线停留
    /// </summary>
    public virtual void RayStay()
    {
        ReSetButtonState();
    }

    /// <summary>
    ///  视线离开
    /// </summary>
    public virtual void RayExit()
    {
        DoStateTransition(SelectionState.Normal, false);
    }
    public virtual void TriggerEvent()
    {
        onClick.Invoke();//调用下 Click事件
        DoStateTransition(SelectionState.Pressed, false);
    }
    /// <summary>
    /// 事件完成
    /// </summary>
    public virtual void ReSetButtonState()
    {
        DoStateTransition(SelectionState.Highlighted, false);
    }

}

猜你喜欢

转载自blog.csdn.net/qq2512667/article/details/88544217