• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

常州手游开发-Unity3D编写Lua逻辑

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1229/284.html

常州手游开发App-Unity3D热更新-LuaFramework-编写Lua逻辑

 

Unity3D中使用lua实现代码热更新,当然也付出了很多,其一,使代码结构混乱(尽管可以优化),其二降低了运行速度,其三增加学习成本(还要多学一门语言)。为了热更新,所有的逻辑都要用lua编写,那么常州手游开发怎样用lua编写游戏逻辑呢?

 

1LuaUpdate方法

 

第一篇代码热更新演示了用lua打印HelloWorld的方法,第二篇资源热更新演示了加载坦克模型的方法。这一篇要把两者结合起来,用lua实现用键盘控制坦克移动的功能。用Lua和用c#编写的Unity3D程序大同小异,只需正确使用API即可,Lua语言的知识请参见《programing in lua》这本书。

 

1.Update方法

出于常州游戏开发培训效率的考虑,tolua提供了名为UpdateBeat的对象,在LuaFramework中,只需给UpdateBeat添加回调函数,该函数便会每帧执行,相当于MonobehaviourUpdate方法。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文件

点击常州网站开发培训菜单栏的LuaClear wrap filesLuaGenerate 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声音管理器