項目後期Lua接入筆記04--宏定義處理HelloWorld

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章