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: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()
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))
if (rigiComponent:Equals(nil)) then
rigiComponent = obj:AddComponent(typeof(Rigidbody))
end
print(rigiComponent)
print(IsNull(rigiComponent))
rigiComponent = nil
print(IsNull(rigiComponent))
print("==============")
print(IsNull(l9.lesson))