Lua和我们Unity游戏用的C#脚本语言有些不同,并不是编译型语言,虽然lua语言在真正执行以前,也会进行编译,这就意味着脚本里面并不支持c#里的宏定义形式,比如我们常用的平台判定UNITY_ANDROID或是自身定义的一些宏定义。
我们需要自己手动构建一个类,并将它wrap,在lua里调用对应的函数。
public static class LuaDefine
{
public static bool UNITY_ANDROID()
{
#if UNITY_ANDROID
return true;
#else
return false;
#endif
}
public static bool UNITY_EDITOR()
{
#if UNITY_EDITOR
return true;
#else
return false;
#endif
}
public static bool UNITY_STANDALONE()
{
#if UNITY_STANDALONE
return true;
#else
return false;
#endif
}
}
打开customsettings,在staticClassTypes里加入typeof(LuaDefine),在customTypeList里加入 _GT(typeof(LuaDefine))。然后执行Lua/GenerateAll.
在Lua中调用时直接LuaDefine.UNITY_ANDROID()
编写自己的Lua脚本
local transform;
local gameObject;
Test1 = {};
local this = Test1;
local message ;
--启动事件--
function Test1.Awake(obj)
gameObject = obj;
transform = obj.transform;
message = obj:GetComponent('LuaMono');
if(LuaDefine.UNITY_ANDROID()) then
log("is android platform");
end
this.InitPanel();
LuaUtils.Log("Awake lua--->>"..gameObject.name);
end
--初始化面板--
function Test1.InitFunc()
LuaUtils.Log("InitFunc lua--->>"..gameObject.name);
end
--初始化面板--
function Test1.InitPanel()
LuaUtils.Log("InitPanel lua--->>"..gameObject.name);
end
--销毁事件--
function Test1.OnDestroy()
LuaUtils.Log("OnDestroy---->>>");
end
return this;
执行脚本前,我们要将lua加载修改一下,在LuaFileUtils的ReadFile()函数,根据自己的项目来进行修改,也可以自定义loader类。写好后将luaManager绑定在一个脚本上,在一个预制体上挂上我们的脚本LuaMono,并设置好lua脚本名,在游戏运行时将预制体实例化出来。运行游戏就可以看到效果了。
版权声明:本文为suifcd原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。