项目后期Lua接入笔记04–宏定义处理HelloWorld

  • Post author:
  • Post category:其他


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 版权协议,转载请附上原文出处链接和本声明。