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.Lesson7
local l7 = Lesson7()

function Fun()
    print("Func执行!")
end

--开始委托为空值,需要先赋值在相加
l7.action = Fun
l7.action = l7.action + Fun
l7.action()
l7.action = l7.action - Fun
l7.action = nil--清空可以直接置空
l7.action = Fun
l7.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.Lesson8
local l8 = Lesson8()
print(l8.array:GetLength(0))
print(l8.array:GetLength(1))

for i = 0, l8.array:GetLength(0) - 1 do
    for j = 0, l8.array:GetLength(1) - 1 do
        print(l8.array:GetValue(i, j))
    end
end

三.C# null和Lua nil比较

  • C#中的null和Lua中的nil不一定一样,需要自己封装一个函数进行判断
public class Lesson9
{
    public Lesson lesson = null;
}
Lesson9 = CS.Lesson9
local l9 = Lesson9()
--对于object类可以这样判空
if l9.lesson == nil then
    print("空对象")
else
    print("非空对象")
end

GameObject = CS.UnityEngine.GameObject
Rigidbody = CS.UnityEngine.Rigidbody

local obj = GameObject("zzs")
local rigiComponent = obj:GetComponent(typeof(Rigidbody))
--对于Object类需要Equals判断
if (rigiComponent:Equals(nil)) then
    rigiComponent = obj:AddComponent(typeof(Rigidbody))
end
print(rigiComponent)
--解决方案一,在主函数中添加全局判空函数IsNull()
print(IsNull(rigiComponent))
rigiComponent = nil
print(IsNull(rigiComponent))
print("==============")
print(IsNull(l9.lesson))
--解决方案二,在C#中拓展Object方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值