Unity - 研究tolua(3) - C#调用lua方法 带参数
C#
using UnityEngine; using LuaInterface; public class Main : MonoBehaviour { LuaState main = null; void Start() { //创建虚拟机 //this.main.RegFunction main = new LuaState(); main.Start(); LuaTable lt = main.DoFile<LuaTable>("ToolBox.lua"); lt.Call("Main", lt); //调用带参数的 LuaFunction ltfun = lt.GetLuaFunction("AngleRota"); Vector2 vec2 = ltfun.Invoke<int, Vector2>(90);//90是参数 Invoke 这个方法可以跟着进去看看具体使用方法,<我需要传的方法,返回的类型> 这个括号里的类型我是这样理解的 Debug.Log($"vec2 ===> {vec2.x},{vec2.y}"); //执行Main.lua 脚本里的 main:GameEnter() //lt.Call("AngleRota", lt); //lt.GetLuaFunction("AngleRota").Call(90); //注销虚拟机 lt.Dispose(); } }
lua 里面的具体方法不用管,只是我自己的一些计算方法,主要内容是C#调用的步骤
local ToolBox = {}
function ToolBox:Main()
print('1====1')
end
function ToolBox:AngleRota(angle)
if angle == nil then
print('angle===>', angle)
angle = 90
end
while (angle > 180) do
angle = angle - 360
end
while angle < -180 do
angle = angle + 360
end
local x = 0
local y = 0
if angle < 180 and angle > 0 then
if (angle < 90) then
x = Mathf.Round(-(angle / 90))
y = Mathf.Round(1 + x)
elseif (angle < 180) then
x = Mathf.Round(-(angle / 180), 2)
y = Mathf.Round(-(1 + x))
else
x = 1
y = 0
end
elseif (angle > -180 and angle < 0) then
if (angle > -90) then
x = Mathf.Round(angle / 90)
y = Mathf.Round(1 - x)
elseif angle > -180 then
x = Mathf.Round(angle / 180)
y = Mathf.Round(-(1 - x))
end
elseif angle == 180 then
x = 0
y = -1
elseif angle == 0 then
x = 0
y = 1
end
--vec2 =
print('x ==> ', x)
print('y ==> ', y)
print('x and y ==> ', Vector2(x, y).x, Vector2(x, y).y)
return Vector2(x, y)
end
return ToolBox

浙公网安备 33010602011771号