原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1218/242.html
Unity3D热更新-LuaFramework-使用lua创建物体
热更新涉及资源热更新和代码热更新(其实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,按照常州手机App外包-幻天网络示例的写法,加上下面这一行:将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中看到我们常州App开发培训-幻天网络打包好的文件。
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
完成后运行游戏,即可看到动态加载出来的模型。
上篇:上一篇:c# 线程
下篇:下一篇:热空气扭曲效果shader