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