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系列