Unity UI xlua 热更:还原塞尔达旷野之息 (持续更新:已补充箭头动效)

整了个小Demo仿照《塞尔达传说:旷野之息》,实现 鼠标悬停在Button上时,能够改变Button-Text颜色,并且在Button前显示一个小箭头

934dfedffee04a52b7f5a308014f101b.gif

标题鼠标指针悬停和移走,改变标题颜色和箭头显示

Unity框架性内容使用C#编写,这些部分均是未来不考虑热更新的配置型的程序,例如如何将UI的Object连接到Lua成为Lua可以调用的变量。Button文字的变色,箭头的显示,这些业务逻辑(考虑到未来可能需要热更新)全部由Lua实现以后可以在不更新整包软件的情况下,通过热更新的方式只更新Lua脚本来重新编写UI界面的业务逻辑,例如Button直接隐藏,位置修改,scale放大,文字颜色修改rgba等。

附C#代码和Lua代码,,,详细的如何配置Lua解释器运行lua脚本和unity的热更新实现,会在下一篇笔记中全部展示。代码中的UILogic脚本以及Manager.Resource.LoadUI等函数三个脚本属于之后会详细展示的笔记。

//挂到需要检测鼠标悬停的UI物体上
public class UIMenuPointerHover : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    UISelect uiSelect;
    void Awake()
    {
        uiSelect = this.GetComponentInParent<UISelect>();
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        (uiSelect.m_OnPointerClickOrHover)?.Invoke(this.gameObject.name.Replace(" ", ""));
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        (uiSelect.m_OnPointerExit)?.Invoke(this.gameObject.name.Replace(" ", ""));
    }
}
//通过UIManager挂到ButtonGroup上
public class UISelect : LuaBehaviour
{
    //自定义类,连接C# 与 Lua
    [System.Serializable]
    public class Injection
    {
        public string name;
        public GameObject button;
        public GameObject arrow;
    }

    [SerializeField] private List<Injection> buttons;
    [SerializeField] private Image ornament;

    Action m_OnMenuUIUpdate;
    Action m_OnMenuUIOpen;
    public UnityEngine.Events.UnityAction<string> m_OnPointerClickOrHover;
    public UnityEngine.Events.UnityAction<string> m_OnPointerExit;

    //初始化配置,创建C#与Lua的变量关系
    public override void Init(string luaName)
    {
        base.Init(luaName);
        m_ScriptEnv.Get("OnMenuUIUpdate", out m_OnMenuUIUpdate);
        m_ScriptEnv.Get("OnMenuUIOpen", out m_OnMenuUIOpen);
        m_ScriptEnv.Get("OnPointerClickOrHover", out m_OnPointerClickOrHover);
        m_ScriptEnv.Get("OnPointerExit", out m_OnPointerExit)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值