第一种创建物体方式
//string demo = @"
// luanet.load_assembly('UnityEngine')
// GameObject = UnityEngine.GameObject
// PrimitiveType = UnityEngine.PrimitiveType
// GameObject.CreatePrimitive(PrimitiveType.Cube);
// ";
#region 第二种创建物体与添加组件
const string demo = @"
luanet.load_assembly('UnityEngine') ----加载UnityEngine程序集
GameObject = luanet.import_type('UnityEngine.GameObject') ----获取GameObject类
PrimitiveType = luanet.import_type('UnityEngine.PrimitiveType') ----获取PrimitiveType类
Rigidbody =luanet.import_type('UnityEngine.Rigidbody') ----获取Rigidbody类并赋值给一个变量Rigidbody
obj = GameObject('KO'); ---使用GameObject构造创建一个空物体名为KO
local cube =GameObject.CreatePrimitive(PrimitiveType.Cube) ----创建Cube
cube:AddComponent(luanet.ctype(Rigidbody)); ----给Cube添加一个Rigidbody类型的组件 'luanet.ctype(组件名称)获取类型'
";
#endregion
#region 获取全局 变量
const string script1 = @"
a = 100
b = '张'
arr = {2,545,64878,454,5642,15,4} ----表
key = {key1 = 10,key2 = 20,key3 = '张'}
";
#endregion
//public TextAsset text; //一个txt文档 包含lua代码 起名时必须是xxx.lua.txt
void Start(){
LuaScriptMgr uLuaState = new LuaScriptMgr(); //uLua反射虚拟机
uLuaState.Start();
uLuaState.DoString(demo);
LuaState ls = new LuaState();
//ls.DoString(text.text); // 执行text文档
ls.DoString(script1);
double a = ls.GetNumber("a");
print("a:" + a);
string b = ls.GetString("b");
print("b:" + b);
ListDictionary lisDic = ls.GetTableDict(ls.GetTable("key")); --获取带有key键的元素
print("lisDic;>>"+lisDic["key1"]);
LuaTable table = ls.GetTable("arr"); ----获取表 不含有key值的元素
for (int i = 1; i < table.Count; i++)
{
print(">>:"+table[i]);
}
}
class Lua_Table{
//通过c#获取lua函数中的多个返回值
// 定以一个变量来编写Lua代码
const string script = @"
function ArrFun(objs,legths)
for i=0,legths-1 do
print(objs[i])
end
local arr = { 1,2,3,4,5,6}
return unpack(arr)
end
";
object[] objs = { 1, 2, 3, 4, 5, 6 };
void Start()
{
LuaScriptMgr uLuaState = new LuaScriptMgr(); //uLua反射虚拟机
uLuaState.Start();
LuaState luastate = uLuaState.lua;
luastate.DoString(script);
LuaFunction l = luastate.GetFunction("ArrFun"); //GetFunction通过Lua脚本中函数名获取
object[] o = l.Call(objs, objs.Length); // Call对获取到的函数是否进行参数赋值,若有参数则必须赋值,没有无需赋值 获取多个返回值
l.Release();
for (int i = 0; i < o.Length; i++)
{
print(">>>:" + o[i].ToString());
}
}
}