找回密码
 立即注册
查看: 238|回复: 0

XLua与C#的简单交互

[复制链接]
发表于 2021-8-12 23:37 | 显示全部楼层 |阅读模式
由于本人也是刚刚接触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)
等后面研究之后在奉上文章。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 08:33 , Processed in 0.094167 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表