我对架构设计的理解

游戏架构设计是一个老生长谈的话题,以前给多个游戏公司培训过,随着时间的积累,对游戏架构设计的理解又多了一些,在此给读者分享一下我对于架构设计的理解。
游戏架构设计是基于引擎的基础上的二次封装,目的是便于游戏开发者能够专注于逻辑的编写,便于多人协同开发,便于功能的扩展等等。不论使用什么引擎,只要掌握了思想,就能解决问题。
我先把我们的设计思想介绍一下,我们的架构设计总体来说是基于组件的模块化设计,举个例子,一个角色要移动,要战斗,要释放技能,我们只需要把移动组件,战斗组件,不同的技能组件加到角上身上就可以了,其他的诸如管理类也是以组件的形式加载到内存中,每个组件都是一个View,我们在设计时,对象上的脚本挂接的非常少,几乎不挂接任何脚本,这样是为了保证资源更新不影响逻辑的编写。下面我们逐一介绍架构设计的实现想法,主要分三步:
第一步:通过观察者模式监听消息,这个消息包括网络消息,各种资源加载消息等等,这个主要是与引擎相关的,对于逻辑层来说,只需要拿到对应的消息处理即可。
第二步:更新游戏对象相关的个体了,在这一步里面,我们可以使用FSM有限状态机,行为树等等,当然也包括玩家的虚拟遥感或者键盘,鼠标等等输入设备。
第三步:逻辑交互层,包括客户端与服务器进行交互,还有对象与场景中的NPC交互等等,这些操作主要是在逻辑层中进行的,比如客户端链接服务器需要链接IP地址和端口号。另外,还有游戏中角色网络同步交互,角色同步更新回到了第二步更新个体了。
以上三步也是一个循环的过程,这样整个游戏架构就形成了一个闭环。下面再介绍实现上述思想需要注意的问题:

  • 内存管理
    这个不论是引擎还是架构设计必须要解决的问题,内存问题解决不好,后期内存泄漏,内存碎片等等都会出现,会导致游戏崩溃,卡顿等问题,所以内存这块必须要用心设计。内存设计可以直接采用Dictionary,List,但是并不灵活,比如,我们的数据采用的是不同的结构体数据或者可变的数据,尤其是网络传输的数据,Dictionary和List就很难满足了,我们还可以采用自定义结构体。

  • 资源的加载
    资源加载会涉及到多种资源,比如重复的资源加载,角色和骨骼动画加载,大的场景资源加载,琐碎的资源加载比如角色头上的血条等等。这些资源的处理方式是不同的,比如重复资源可以采用对象池的方式,角色头上的血条可以采用对象池与自定义网格结合的方式,角色身上的骨骼可以采用共享的骨骼动画方式,最后是大的场景资源在加载时要保证足够大的内存,防止琐碎内存过多导致加载大资源时卡顿。

  • 渲染
    渲染的好坏决定了游戏的品质,渲染包括很多:模型的材质渲染,特效渲染,后处理渲染,地形渲染以及一些特殊效果的渲染。先说说模型的材质渲染,模型的贴图渲染有很多种,PBR,NPR,V-RAY等等,后处理渲染,包括,HDR,PSM,景深,Bloom,Blur,体素渲染等等,地形渲染主要是对地表的贴图渲染。我们对模型的渲染要注意材质贴图的大小。

  • AI
    AI算法包括AI寻路和行为树,AI寻路一般会采用A*算法,包括客户端和服务器都可以采用,AI行为树主要用于个体的行为更新。

  • 架构设计
    我们会采用组件模式,MVC,FSM,State,Observe,Factory,Singleton等等就可以设计实现我们需要的框架。

总结
架构设计思想很重要,编写代码运用任何语言都可以实现。热更新方案市面上都有现成的方案,可以拿过来直接使用。以Unity为例,C#有很多的语言特性:Attribute,Delegate, Action,Func,Reflection等。熟练运用它们我们实现架构设计没有任何问题。其实所谓的架构设计,需要满足多人协作模块开发,架构功能易于扩展等等即可。

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值