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腳本名,在遊戲運行時將預製體實例化出來。運行遊戲就可以看到效果了。