Lua学习随感之一开始编写UI脚本

Agatha ·
更新时间:2024-11-14
· 611 次阅读

前言 本文章作为自己的学习lua的笔记,用来加深理解。这次要学的是用Lua代替C#来写Unity的UI交互功能。 我将会建立几个通用游戏脚本来理解Lua如何与Unity UI进行交互

如果你只想看Demo,那就拉到最后面吧

编写Lua Panel脚本 开始界面/游戏界面/结束界面

我们需要制作Unity MonoBehavior生命周期几个常用的方法,Awake-OnEnable-Start-Update-OnDestroy,
然后在Awake方法里获取UI界面中我们建立的三个按钮对象,并侦听按钮事件

local panelName = 'LobbyPanel' local playBtn = nil local skinBtn = nil local musicBtn = nil -- 这里的GetGameObjectByName方法是在C#端的一个静态方法,用来获取UI界面上的按钮对象( 下面有代码) function Awake() playBtn = CS.XLuaUtils.GetGameObjectByName('playBtn',self.gameObject) skinBtn = CS.XLuaUtils.GetGameObjectByName('skinBtn',self.gameObject) musicBtn = CS.XLuaUtils.GetGameObjectByName('musicBtn',self.gameObject) end function OnEnable() -- print(panelName, ' LobbyPanel this is OnEnable function') end function Start() -- print(panelName, ' this is Start function') AddListener() end -- 侦听按钮事件 -- 这里的也是C# 端的一个侦听方法(下面有代码) function AddListener() playBtn:AddButtonListener(PlayClick) skinBtn:AddButtonListener(SkinClick) musicBtn:AddButtonListener(MusicClick) end function PlayClick() -- 这里调用了UIManager一个总的UI管理类,稍后会说 UIManager.OpenPanel('GamePanel') end function SkinClick() print(' SkinClick handle') end function MusicClick() print(' MusicClick handle') end function Update() -- print("this is Update function") end function OnDestroy() print('this is OnDestroy function') end

下面的是在C#端定义的获取对象和注册按钮侦听事件的静态方法

public static GameObject GetGameObjectByName(string findName, GameObject parent) { GameObject obj = null; Transform[] objChildren = parent.GetComponentsInChildren(true); for (int i = 0; i < objChildren.Length; ++i) { if (objChildren[i].name == findName) { obj = objChildren[i].gameObject; break; } } return obj; } public static void AddButtonListener(this GameObject go,Action _cb) { go.GetComponent
需要 登录 后方可回复, 如果你还没有账号请 注册新账号