制作一个承载想法的东西(一)—驱动

  • A+
所属分类:Unity3d 原创文章

说到想法,那就先说说想法了。这段时间就在想,人生有了一个笔记本和一个博客可以记录你的东西,这些确实一些不是很具有生动的展现,所以我就想弄一个游戏展示的app,可以把自己的一些想法和实现所呈现的效果展示出来,这样拿着手机的我就可以看到这些东西了。

为了避免频繁的打包,例如每次一个想法就打包安装一次,这样体验就太差了。所以我就想着用ToLua来做代码的而更新,为了代码尽量都能更新,所以运行的逻辑将大部分都放在lua上面。

大概的思路的是这样的,首先在一个入口场景中,初始化信息并将触发的调用方法转移到lua那边去执行,以后的逻辑就放在那边,c#这边将会做一个辅助功能,方便lua那边去使用。然后在到更新的场景,这里要做的就是把资源和代码更新到最新,资源的话我会选择打包整个场景,方便又快捷,代码的话没什么好说的,轻量级别的直接单文件下载得了。再然后到一个大厅得地方,获取关卡列表,展示UI。最后就是点击关卡,就加载相应得关卡场景了。

 

先来看看启动场景,用于框架的启动和场景加载进度条的实现,其他内容功能性场景都会一叠加的方式添加出来,启动场景将永远保留在内存中。

制作一个承载想法的东西(一)---驱动

 

启动场景挂载了一个启动脚本,用来初始化Lua虚拟机及转移一些Unity引擎驱动的方法,如Awake、Start、Update方法等。还用来提供一些功能性的方法,如保存文件等等

 

可以看出初始化的时候加载了Main.lua的脚本文件,并把相应的引擎方法Start、Update方法转移到Main.lua的相应方法中,这样调用是没有考虑性能问题的,暂时也没有发现特别耗时,相反的看到log输出更加耗时。下面看看Lua那边的启动文件Main.lua

很简单的一个Lua启动脚本,首先是全局的引入一些公用常用的方法和常量还有管理器,提供那两个Unity驱动调用的方法Init和Update,在这两个方法里面调用游戏管理器的相应方法,从而驱动整个游戏的运行,下面就看看这个游戏管理器GameManager.lua

游戏管理器是一个单例模式管理器,方便调用,这里大部分管理器都会运用单例模式,主要是为了方便。在初始化方法中,初始化相应需要初始化的管理器,这里就先不一一的讲了,后面有用到的时候在说把。除了初始化管理器,你也看到了一个updates的table,保存了用方法RegistUpdate()注册的触发器,通过Unity驱动的Update的方法实现相应的计时,达到要求的就调用handler回调,从而驱动游戏单元的每帧执行逻辑和定时执行逻辑。所有的lua脚本都可以通过GameManager这个单例管理器去注册自己的定时执行方法,从而驱动游戏逻辑的运行。在不需要更新逻辑或则脚本释放的时候,记得移除update不然可能会引起错误。InvokeDelay会延迟调用指定的方法,调用完就丢弃了。

 

那个handler是一个在functions.lua里面的handler方法生成的方法,为的就是辨别self是谁,下面看看这个方法。

返回一个方法就是我们说的回调,调用的时候指定调用方,防止调用方的不正确从而里面的self获取不到当前类的属性方法。

 

到场景1的预览效果:

制作一个承载想法的东西(一)---驱动

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: