2.Unity3D热更新-LuaFramework-使用lua创建物体


本文固定链接:http://blog.csdn.net/u013108312/article/details/53924934


1、创建物体
为了调试的方便,笔者先将框架配置为本地模式,待测试热更新时再改成更新模式。

/// 
        /// 如果开启更新模式,前提必须启动框架自带服务器端。
        /// 否则就需要自己将StreamingAssets里面的所有内容
        /// 复制到自己的Webserver上面,并修改下面的WebUrl。
        /// 
        public const bool UpdateMode = false;                       //更新模式-默认关闭 
        public const bool LuaByteMode = false;                       //Lua字节码模式-默认关闭 
        public const bool LuaBundleMode = true;                    //Lua代码AssetBundle模式

先测试个简单的创建物体,新建一个名为go的物体,然后设置它的坐标为(1,1,1)。这段代码虽然不涉及资源加载,但能展示“把物体添加到场景中”的过程。Main.lua的代码如下:

function Main()                 
    local go = UnityEngine.GameObject ('go')
    go.transform.position = Vector3.one     
end

2、资源打包
LuaFramework在打包方面并没有做太多的工作,我们需要手动打包。打开Assets/LuaFramework/Editor/Packager.cs,按照示例的写法

/// 
    /// 处理框架实例包
    /// 
    static void HandleExampleBundle() {
        string resPath = AppDataPath + "/" + AppConst.AssetDir + "/";
        if (!Directory.Exists(resPath)) Directory.CreateDirectory(resPath);

        AddBuildMap("prompt" + AppConst.ExtName, "*.prefab", "Assets/LuaFramework/Examples/Builds/Prompt");
        AddBuildMap("message" + AppConst.ExtName, "*.prefab", "Assets/LuaFramework/Examples/Builds/Message");

        AddBuildMap("prompt_asset" + AppConst.ExtName, "*.png", "Assets/LuaFramework/Examples/Textures/Prompt");
        AddBuildMap("shared_asset" + AppConst.ExtName, "*.png", "Assets/LuaFramework/Examples/Textures/Shared");
//Add
        AddBuildMap("cubetest" + AppConst.ExtName, "*.prefab", "Assets/MyTestPrefab/PrefabTest/CubeTest");
    }

新建文件夹:Assets/MyTestPrefab/PrefabTest/CubeTest
新建Cube。重命名:CubeTestOne。做成prefab。
点击“Build Windows Resource”,即可在StreamingAssets中看到打包好的文件。

cubetest
cubetest.unity3d

3、动态加载模型
编写如下lua代码(main.lua),使用框架提供的资源管理器(resMgr)加载cubetest包的TankPrefab文件,加载完成后回调OnLoadFinish方法。在OnLoadFinish中使用Instantiate实例化对象。

--主入口函数。从这里开始lua逻辑
function Main()
     LuaHelper = LuaFramework.LuaHelper;
     resMgr = LuaHelper.GetResManager();
     resMgr:LoadPrefab('cubetest',{'CubeTestOne'},OnLoadFinish);    
end

function OnLoadFinish( objs )
    -- body
    local go = UnityEngine.GameObject.Instantiate(objs[0]);
    LuaFramework.Util.Log("Finish");
end

完成后运行游戏,即可看到动态加载出来的模型。


本文固定链接:http://blog.csdn.net/u013108312/article/details/53924934


你可能感兴趣的:(Lua)