|
讲师简介:沈于晴,拥有15年程序开发经验,参与过多平台的多款高质量的游戏开发。现任腾讯互动娱乐北极光工作室群《真龙霸业》项目组客户端主程。
下文为《SLG游戏技术》内容节选
《真龙霸业》是一个三国题材的战争策略类游戏,它拥有多样的大地图、精彩的3D战斗以及丰富的卡牌玩法。本次课程将带大家了解《真龙霸业》的系统框架与重点系统是如何实现的。
01、《真龙霸业》的系统框架
《真龙霸业》的引擎是用Unity做的,并用Ulua的Framework把Lua和C#做了结合,现在的游戏对快速迭代的要求非常高,而用Lua的框架,就能进行热更新,其中C#层完成核心系统支持,Lua层完成大部分界面和游戏玩法逻辑。
《真龙霸业》的基本架构由两部分组成,第一部分是基础引擎层,用C#来实现,包括内存管理、网络管理、资源管理、协程管理、场景管理;第二部分是脚本中间层,包括UI、逻辑、回调处理。
基本架构
脚本中间层的基础组件:
1)作用域(Scope),主要是管理脚本中模块的作用范围,它可以多层嵌套,在Scope退出的时候,所有注册在Scope以及子Scope里的对象,都会被自动清理掉。
2)事件系统(Event),主要是负责系统模块之间以及组件之间的一些信息传递,负责C#发出的一些事件的接收,还包括系统级事件的监听。
3)任务系统(Schedule),它是串行和并行任务的执行和同步,处理模块延迟和例行处理。
4)场景管理(Scene Manager),场景级别资源调度处理,通过LuaComponent组件映射各种不同的Scene。
5)调试系统(Debug Panel),主要是流程控制、重载脚本、日志检索、输入指令、性能分析、特效开关、系统信息。
6)组件(Component),实现Lua -> C#的映射,通过数据/脚本驱动这些组件,实现复杂的游戏逻辑。
02、内城建设
内城主要承载数值向和经济向的东西,主要是用Lua来完成的,且大部分是菜单构成的,菜单主要是采用MVC的架构来实现的。
下图是比较常见的一个解耦模型,把菜单分成几部分:Model主要用来封装应用层和应用逻辑相关的数据以及对数据的处理方法;View可以实现数据有目的的显示,但不一定需要它;Controller主要用来控制流程。模型一旦更新了以后,就会刷新View,View被用户看见了以后,用户就会使用Controller,然后去创建。
03、战斗系统
1)战斗逻辑
《真龙霸业》是一个联网的游戏,所以客户端在用户手上,而客户端是可以被修改的,所以必须让客户端和服务端能复用一套代码,检验玩家是否作弊。
2)战斗通讯
战斗逻辑服务器和客户端跑同样的一份Lua脚本。服务器先把战斗输入数据下发给客户端,客户端做相同运算并且展示,可以保证战斗记录的精简。
3)战斗优化
开发团队在实现战斗系统的过程中,遇到过一些问题,包括特效动态实例化严重、Game Object组件频繁创建、声音组件消耗过大、Lua和C#交互太频繁、GC严重、Draw Call太高、Over Draw严重等等,这些问题都需要想办法去优化。
04、大地图
大地图是如何实现的?首先把大地图拆分为N*N的网格,N约为1000。网格分为Tile层(基础地表)、Deco层(装饰地表)、Object层(物件)。采用这种格式,主要是想利用Unity的一个方案,在同一批次中渲染地图,提升渲染速度,减少性能开销。
因为《真龙霸业》是一个联网类的游戏,为了防止作弊,所有的数据全控制在服务器,客户端只是通过一些协议来获取信息。但在处理协议时,会出现一些问题,比如大量单位同时出现,大量的用户同时打同一个敌人,或是大量用户之间相互争斗等等。要想解决这些问题,需要做一些网络优化和性能优化。
来源:微信公众号“腾讯游戏学院”
原地址:https://mp.weixin.qq.com/s/PYLvS_kN3CVy1cdC30L9YQ
|
|