|
由于本人也是刚刚接触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)
等后面研究之后在奉上文章。。。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|