Unity3D热更新-LuaFramework-使用lua创建物体
发表于2018-09-04
热更新涉及资源热更新和代码热更新(其实lua代码也是资源),本篇文章中要给大家介绍的是如何使用lua创建物体,动态加载一个模型,然后热更成其他素材。
1、创建物体
为了调试的方便,笔者先将框架配置为本地模式,待测试热更新时再改成更新模式。
/// <summary>
/// 如果开启更新模式,前提必须启动框架自带服务器端。
/// 否则就需要自己将StreamingAssets里面的所有内容
/// 复制到自己的Webserver上面,并修改下面的WebUrl。
/// </summary>
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,按照示例的写法,加上下面这一行:将Assets/Tank目录下的所有预设(。prefab)打包成名为tank的包。
/// <summary>
/// 处理框架实例包
/// </summary>
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。
点击“BuildWindowsResource”,即可在StreamingAssets中看到打包好的文件。
cubetest cubetest.unity3d
3、动态加载模型
编写如下lua代码(main.lua),使用框架提供的资源管理器(resMgr)加载tank包的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
完成后运行游戏,即可看到动态加载出来的模型。
Unity3D热更新之LuaFramework系列
