Net Core教程

Unity - 研究tolua(3) - C#调用lua方法 带参数

本文主要是介绍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

 

这篇关于Unity - 研究tolua(3) - C#调用lua方法 带参数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!