XLua与C#的简单交互

 由于本人也是刚刚接触XLUA,所以,  今天的这篇文章就简单的讲述一下XLUA调C# ,C#调XLUA 的基本运用。

开始是C#调用LUA:

首先先下载Xlua文件  解压 把需要的文件导入到unity中

链接:https://pan.baidu.com/s/1OPivTn54SQjNl3H3IBHMrQ 
提取码:twgf 

导入完成以后新建一个CS脚本 ,在CS脚本中引用XLUA的命名空间。

 public GameObject cube;

    LuaEnv luaEnv = null;
    // Use this for initialization
    void Start()
    {
        //初始化lua环境  
        luaEnv = new LuaEnv();

        #region   C#调用lua

        luaEnv.DoString("print'hello word'");

        //第一种加载Lua文件 用 Resources.Load  需要把lua文件放在Resources文件夹下
        TextAsset textAsset = Resources.Load<TextAsset>("testLua07.lua");
        luaEnv.DoString(textAsset.text);

        //第二种加载Lua文件  用 require
        luaEnv.DoString("require'testLua07'");

        //获取定义变量   可以通过luaEnv.Global.Get<>()  就可以在C#中访问XLUA里面的声明的变量
        int a = luaEnv.Global.Get<int>("a");
        int b = luaEnv.Global.Get<int>("b");
        bool c = luaEnv.Global.Get<bool>("c");
        string d = luaEnv.Global.Get<string>("d");
        Debug.Log("C# 调用lua里面定义的变量" + (a + b) + c + d);

        //获取lua 无参方法
        LuaFunction funLua1 = luaEnv.Global.Get<LuaFunction>("funLua1");
        //调用方法
        funLua1.Call();

        //调用lua  有参方法
        LuaFunction funLua2 = luaEnv.Global.Get<LuaFunction>("funLua2");
        funLua2.Call(1, 2);

        #endregion

        luaEnv.DoString("CS.UnityEngine.Debug.Log('C#  hello word hello word')");

    }

Lua文件如下:

print("hello i am lua ")
 --int
a=1   
b=2

 --bool
c=true 

--string 
d="Wahaha"   

print("变量a+b"..a+b)

--lua方法1  无参方法
function funLua1()
print("LuaFun1 a+b"..a+b)
end

--lua方法2 有参方法
function funLua2(e,f)
    print("调用有参方法 e+f"..e+f)
end
 

Lua调用C#:

C#脚本如下:

#region lua 调用C#

    //静态属性 和方法
    public static int index = 1;
    public static int Add(int a, int b)
    {
        return a + b;
    }

    //非静态方法 和属性
    public int id = 1;
    public void Log(int id = 1, string name = "hello")
    {
        Debug.Log("id加姓名:" + id + name);
    }
    
    #endregion
    
    // Update is called once per frame
    void Update()
    {
        if (luaEnv != null)
        {
            //清除Lua未手动释放的Luabase对象
            luaEnv.Tick();
        }
    }
    void OnDestroy()
    {
        //释放
        luaEnv.Dispose();
    }

lua脚本:


--[[
lua 调用C#

]]
--lua 调用C#   静态方法和属性
--通过CS点类名
local add=CS.Test
--获取到类名 再通过点定义的变量   可访问到属性
add.index=5;
--获取到类名 通过点方法   可访问到方法
add.Add(2,3)
print("lua"..add.index.."a+b"..add.Add(2,3))


--lua调用非静态方法和属性 
--通过点类名 获取到对象
local Logstr=CS.Test
local logstr=Logstr()
--通过点变量  来访问变量
logstr.id=55
print("lua no static fun"..logstr.id)
--通过冒号方法    来访问方法  
logstr:Log()
logstr:Log(1231212)
logstr:Log(12,"wahaha ")
 

--通过Lua获取到unity里面的对象  Lua中通过 CS.UnityEngine.GameObject 获取unity组件


print("访问静态属性 time "..CS.UnityEngine.Time.deltaTime)


--构造游戏物体 New一个名为“”GameObject“”对象  
local go= CS.UnityEngine.GameObject("GameObject")


把“”GameObject“”名字改为“”go“”
go.name="go"


--获取到 组件
local Light=CS.UnityEngine.GameObject.Find("Directional Light"):GetComponent("Light");


--销毁组件  销毁物体使用 CS.UnityEngine.GameObject.Destroy()
CS.UnityEngine.GameObject.Destroy(Light)


--获取组件  并重新赋值位置   lua中可以使用Find来查找物体 
local cube =CS.UnityEngine.GameObject.Find("Cube");


--设置物体位置
cube.transform.position=CS.UnityEngine.Vector3.one
cube.transform.position=CS.UnityEngine.Vector3(0,3,0)
--设置大小
cube.transform.localScale=CS.UnityEngine.Vector3(3,3,3)
--设置位置
cube.transform.localPosition=CS.UnityEngine.Vector3(5,5,5)
--设置父物体
cube.transform:SetParent(CS.UnityEngine.GameObject.Find("go").transform);
--改变颜色
cube:GetComponent("Image").color=CS.UnityEngine.Color(111/255,89/255,1)


--获取类型 可以用typeof() 如:go:AddComponent(typeof(CS.UnityEngine.ParticleSystem));

--[[--添加刚体
rig=nil
rig=cube:AddComponent(typeof(CS.UnityEngine.Rigidbody))
   rig.useGravity=false
--]]

今天文章只讲述了C#与XLua之间属性和方法的简单调用(因为刚开始只研究到这里0.0)

等后面研究之后在奉上文章。。。 

猜你喜欢

转载自blog.csdn.net/fineboby/article/details/89335789
今日推荐