200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Unity Xlua 之 Lua调用C#(三)

Unity Xlua 之 Lua调用C#(三)

时间:2022-09-25 20:51:23

相关推荐

Unity Xlua 之 Lua调用C#(三)

Unity Xlua 之 Lua调用C#(三)

一.Lua使用C#委托和事件

public class Lesson7{public UnityAction action;public event UnityAction eventAction;public void DoEvent(){eventAction?.Invoke();}public void ClearEvent(){eventAction = null;}}

Lesson7 = CS.Lesson7local l7 = Lesson7()function Fun()print("Func执行!")end--开始委托为空值,需要先赋值在相加l7.action = Funl7.action = l7.action + Funl7.action()l7.action = l7.action - Funl7.action = nil--清空可以直接置空l7.action = Funl7.action()print("=====Event=====")l7:eventAction("+",Fun)l7:eventAction("+",Fun)l7:eventAction("+",Fun)l7:eventAction("+",Fun)l7:eventAction("+",Fun)l7:DoEvent()print("=====Event减去=====")l7:eventAction("-",Fun)l7:eventAction("-",Fun)--l7.eventAction = nil 清空不可以直接置空,需要在Unity中添加函数l7:ClearEvent()l7:DoEvent()

二.Lua使用C#二维数组

Lua中不能直接使用[index]来获取二维数组中的元素

public class Lesson8{public int[,] array = {{1, 2, 3 }, {1, 2, 3 } };}

Lesson8 = CS.Lesson8local l8 = Lesson8()print(l8.array:GetLength(0))print(l8.array:GetLength(1))for i = 0, l8.array:GetLength(0) - 1 dofor j = 0, l8.array:GetLength(1) - 1 doprint(l8.array:GetValue(i, j))endend

三.C# null和Lua nil比较

C#中的null和Lua中的nil不一定一样,需要自己封装一个函数进行判断

public class Lesson9{public Lesson lesson = null;}

Lesson9 = CS.Lesson9local l9 = Lesson9()--对于object类可以这样判空if l9.lesson == nil thenprint("空对象")elseprint("非空对象")endGameObject = CS.UnityEngine.GameObjectRigidbody = CS.UnityEngine.Rigidbodylocal obj = GameObject("zzs")local rigiComponent = obj:GetComponent(typeof(Rigidbody))--对于Object类需要Equals判断if (rigiComponent:Equals(nil)) thenrigiComponent = obj:AddComponent(typeof(Rigidbody))endprint(rigiComponent)--解决方案一,在主函数中添加全局判空函数IsNull()print(IsNull(rigiComponent))rigiComponent = nilprint(IsNull(rigiComponent))print("==============")print(IsNull(l9.lesson))--解决方案二,在C#中拓展Object方法

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。