本文章作为自己的学习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
接下来是怎么在unity端调用这个脚本的问题,我的上一个博客有说到一个XLuaMonoBehaviour.cs类
,我们把这个脚本挂在我们在Unity的LobbyPanel对象上,然后在scriptName变量上写上Lua脚本的名字,这样我们的LobbyPanel lua类就做成了。
运用同样的方法我又做了GamePanel(游戏中界面),GameOverPanel(游戏结束界面),初始化界面,寻找到按钮对象,侦听事件,在事件方法里处理UI交互的问题。预制体的加载稍后会说
原创文章 9获赞 3访问量 7939
关注
私信
展开阅读全文
作者:JoeyHuangzx