原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1229/284.html
常州手游开发App-Unity3D热更新-LuaFramework-编写Lua逻辑
在Unity3D中使用lua实现代码热更新,当然也付出了很多,其一,使代码结构混乱(尽管可以优化),其二降低了运行速度,其三增加学习成本(还要多学一门语言)。为了热更新,所有的逻辑都要用lua编写,那么常州手游开发怎样用lua编写游戏逻辑呢?
1、Lua的Update方法
第一篇“代码热更新”演示了用lua打印HelloWorld的方法,第二篇“资源热更新”演示了加载坦克模型的方法。这一篇要把两者结合起来,用lua实现“用键盘控制坦克移动”的功能。用Lua和用c#编写的Unity3D程序大同小异,只需正确使用API即可,Lua语言的知识请参见《programing in lua》这本书。
1.Update方法
出于常州游戏开发培训效率的考虑,tolua提供了名为UpdateBeat的对象,在LuaFramework中,只需给UpdateBeat添加回调函数,该函数便会每帧执行,相当于Monobehaviour的Update方法。Lua代码如下所示:
--主入口函数。从这里开始lua逻辑
function Main()
--LuaHelper = LuaFramework.LuaHelper;
--resMgr = LuaHelper.GetResManager();
--resMgr:LoadPrefab('cubetest',{'CubeTestOne'},OnLoadFinish);
UpdateBeat:Add(Update,self);
end
function Update()
-- body
LuaFramework.Util.Log("每帧执行一次");
end
2.控制Cube
local go;
--手机App外包主入口函数。从这里开始lua逻辑
function Main()
LuaHelper = LuaFramework.LuaHelper;
resMgr = LuaHelper.GetResManager();
resMgr:LoadPrefab('cubetest',{'CubeTestOne'},OnLoadFinish);
end
function OnLoadFinish( objs )
-- body
go = UnityEngine.GameObject.Instantiate(objs[0]);
LuaFramework.Util.Log("Finish");
UpdateBeat:Add(Update,self);
end
function Update()
-- body
--LuaFramework.Util.Log("每帧执行一次");
local Input = UnityEngine.Input;
local horizontal = Input.GetAxis("Horizontal");
local vertical = Input.GetAxis("Vertical");
local x = go.transform.position.x + horizontal;
local z = go.transform.position.z + vertical;
go.transform.position = Vector3.New(x,0,z);
end
--场景切换通知
function OnLevelWasLoaded(level)
Time.timeSinceLevelLoad = 0
end
2、自定义API
框架中提供了数十个可供lua调用的c#类,但这些往往不够用,需要自己添加,App开发培训本节将介绍添加自定义API的方法。
1.编写c#类
例如,编写TestLuaFun.类,它包含一个静态方法Log,会打印出“《Unity3D网络游戏实战》是一本好书!”和“《手把手教你用c#制作rpg游戏》也是一本好书!”两行文本。
using UnityEngine;
using System.Collections;
public class TestLuaFun{
public static void LogTest()
{
Debug.LogError("This is TestLuaFun static LogTest()");
}
}
2.修改CustomSetting
打开CustomSetting.cs,在customTypeList中添加一句“_GT(typeof(TestLuaFun))”。
_GT(typeof(GameManager)),
_GT(typeof(LuaManager)),
_GT(typeof(PanelManager)),
_GT(typeof(SoundManager)),
_GT(typeof(TimerManager)),
_GT(typeof(ThreadManager)),
_GT(typeof(NetworkManager)),
_GT(typeof(ResourceManager)),
//for Test
_GT(typeof(TestLuaFun)),
};
3.生成wrap文件
点击常州网站开发培训菜单栏的Lua→Clear wrap files和Lua→Generate All,重新生成wrap文件。由于刚刚在customTypeList添加了类,所以企业培训会生成TestLuaFun类的wrap文件TestLuaFunWrap.cs。
4.测试API
修改main.lua,调用TestLuaFun.Log() ,即可看到常州软件技术培训效果。
--主入口函数。从这里开始lua逻辑
function Main()
--Test API
TestLuaFun.LogTest();
end
上篇:上一篇:常州微信小程序开发-U3d Resources.Load动态加载资源
下篇:下一篇:常州微信公众平台-U3DLuaFramework声音管理器