我翻开知乎查看游戏架构浏览,这问题没有专门答案,歪歪斜斜的每页上都写着"MVC",“MVVC”,"MVP",“uFame架构”几个字。横竖想了半天,最后在一个倒影年华 博主下发现一个很好的回答:

框架是为了解决一个又一个在Web开发中所遇到的问题而诞生的。不同的框架,都是为了解决不同的问题,但是对于程序员而言,他们只是 jar包而已。框架的优缺点的评论,也完全取决于其对问题解决程度和解决方式的优雅性的评论。所以,千万不要为了学习框架而学习框架,而是要为了解决问题 而学习框架,这才是一个程序员的正确学习之道。

这段话适用于游戏开发。

游戏题材众多,要通用的一个架构搞定所有题材几乎不可能。但是游戏也是软件,有些常识性的东西可以通用的。个人认为相比于框架,更重要的是设计理念。

0.关注点分离原则

关注点分离是日常生活和生产中广泛使用的解决复杂问题的一种系统思维方法。大体思路是,先将复杂问题做合理的分解,再分别仔细研究问题的不同侧面(关注点),最后综合各方面的结果,合成整体的解决方案
许多游戏的对象都可以分为显示表现部分,逻辑处理部分,数据存储部分。

比如一个MOBA游戏的角色,就要把视觉相关的内容和核心逻辑给分离开。

角色表现部分:动画、模型显示、相关特效、UI等美术资源和控制模型动画播放,生命值血条变化等改变对象显示的部分代码。

核心逻辑部分:控制对象行为(移动、***、技能),控制对象数值变化(被击扣血、击杀获得金钱),处理业务逻辑部分。

数据存储部分:记录玩家自身属性、如***、血量、防御力等。

角色显示和逻辑分开的好处一是可以让我们的代码清晰,出了问题能直观的去相应的代码块去找问题,二是分离代码逻辑后,如果美术资源的更新,以及策划的更新不会影响到主要的业务逻辑代码,这就提高了游戏的可移植性。

/比如王者荣耀一个英雄有很多皮肤,不可能每一个皮肤都要去写一套逻辑代码,我们只要将显示部分替换/
而逻辑和数据分离的好处是可以代码复用减少耦合。

/比如我们游戏中有一个玩家和一个敌方小兵的对象,双方实际上数据是相似的,我们就可以用一个角色数据脚本存储双方数据,而不用写两遍代码在各自的逻辑里面。同时当双方都扣血的时候,UI血条控制脚本能直接去角色数据脚本中取资源/

1.开放封闭原则

开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。

开放封闭原则主要体现在两个方面:

对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

游戏开发中有很多的突发事件,经常会用到监听观察者模式。这种又叫做响应式编程的思想。

比如一款游戏从开发到发行对一个事件的处理是由简单到复杂的。比如游戏战斗结束,如果在战斗管理器里面写具体执行的逻辑代码,那么后期策划逐渐提出我们要在战斗结束的时候加入“镜头变化”,“加入UI变化”,加入“服务器数据请求”等需求的时候,避免我们每次都要修改已经完成的功能,我们就将战斗结束作为一个事件发送,哪个系统关心这个事件就在各自的逻辑代码函数注册到这个事件中。

这种编程方式广泛用在游戏各个功能块中,比如场景加载模块,当场景加载后调用加载完成事件,谁需要在加载完成后处理什么事件逻辑,自己就去注册调用就好了。

2.不信任原则

这个是最近看腾讯云技术社区发表的文章后总结出来的。深有感触。
说的很好,游戏编程就像扫雷,你一不小心就会在某一步出错,游戏直接Over掉。

所以我们的编程应该步步为营,一个功能能再细化操作的就细化出来,比如一个UI管理器,就得处理UI的加载、创建、设置类型、设置层级、显示、处理逻辑、关闭或删除等功能。因为当后期做优化或者解决冲突,其中的每一步都可能是一个关键问题点。

直接利用引擎实现的部分也需要有一定的封装,你会看到很多游戏源码里面部分类都自己有一个Base基类。

即使这样,以上原则也有部分游戏开发不适应,各位看官还是以自身项目情况出发巧用设计方法。

很多相关框架的答案都用了各种专业的词汇来形容这个框架是多么的牛逼,多么的厉害。但是一般学了几年程序的朋友都能摸索出来自己的框架,不会去主动去问常用框架的问题(一般想了解的话自己就去各种搜索了解了,互联网就是技术人员的后盾嘛)。

而一般问这个问题的基本都是初学者,初学者听到答案后去各种看框架,看到中间后发现越看越看不懂。学具体写法不如学理念,这个东西是永远不会过时的。

对于初学者来说代码量太少了是一个大问题,自己还没有做到一定复杂度的系统时是感受不到框架的作用的。就如同房间里面什么东西都没有,你怎么做物品分类呢?所以先加油去写功B能U代G码吧,然后反复的重构你们会创造属于自己的框架。

我翻开知乎查看游戏架构浏览,这问题没有专门答案,歪歪斜斜的每页上都写着"MVC",“MVVC”,"MVP",“uFame架构”几个字。横竖想了半天,最后在一个倒影年华 博主下发现一个很好的回答:

框架是为了解决一个又一个在Web开发中所遇到的问题而诞生的。不同的框架,都是为了解决不同的问题,但是对于程序员而言,他们只是 jar包而已。框架的优缺点的评论,也完全取决于其对问题解决程度和解决方式的优雅性的评论。所以,千万不要为了学习框架而学习框架,而是要为了解决问题 而学习框架,这才是一个程序员的正确学习之道。

这段话适用于游戏开发。

游戏题材众多,要通用的一个架构搞定所有题材几乎不可能。但是游戏也是软件,有些常识性的东西可以通用的。个人认为相比于框架,更重要的是设计理念。

转载于:https://blog.51cto.com/14058389/2316587

什么是架构?Untiy开发游戏使用什么架构合适?相关推荐

  1. 《游戏服务器的架构演进》阅读笔记

    游戏服务器特征 游戏服务器端,是一个会长期运行的程序,并且它还要服务于多个不定时,不定点的网络请求.所以这类软件的特点是要非常关注稳定性和性能.这类程序如果需要多个协作来提高承载能力,则还要关注部署和 ...

  2. 游戏服务器的架构演进

    本文阅读预计需要10分钟,主要技术点来如下,感兴趣请继续: 游戏服务器特征 短连接游戏服务器架构 长链接游戏服务器架构 分区分服服务器架构 MMOARPG服务器架构 房间服务器架构 一.游戏服务器特征 ...

  3. 游戏服务器的架构演进、多进程架构通信

    系列文章目录 文章目录 系列文章目录 前言 一.游戏服务器特征 二.游戏服务器架构要素 三.服务器演化进程 1.卡牌等休闲游戏弱交互游戏 2.长链接游戏服务器 1.第一代网游服务器(单线程无阻塞) 2 ...

  4. 【服务器架构】经典游戏服务器端架构概述(续)

    全服分线模型 一.模型描述 由于多进程服务器模型的发展,游戏开发者们首先发现,由于游戏业务的特点,那些需要持久化的数据,一般都是玩家的存档,以及一些游戏本身需要用的,在运行期只读的数据.这对于存储进程 ...

  5. python能做游戏吗-python能开发游戏吗

    python可以写游戏,但不适合.下面我们来分析一下具体原因. 用锤子能造汽车吗? 谁也没法说不能吧?历史上也确实曾经有些汽车,是用锤子造出来的.但一般来说,还是用工业机器人更合适对吗? 比较大型的, ...

  6. python如何开发游戏脚本_python能开发游戏吗

    python可以写游戏,但不适合.下面我们来分析一下具体原因. 用锤子能造汽车吗? 谁也没法说不能吧?历史上也确实曾经有些汽车,是用锤子造出来的.但一般来说,还是用工业机器人更合适对吗? 比较大型的, ...

  7. python适合开发游戏吗_python能开发游戏吗

    python可以写游戏,但不适合.下面我们来分析一下具体原因. 用锤子能造汽车吗? 谁也没法说不能吧?历史上也确实曾经有些汽车,是用锤子造出来的.但一般来说,还是用工业机器人更合适对吗? 比较大型的, ...

  8. python能开发游戏吗

    python能开发游戏吗 更多python视频教程请到菜鸟教程https://www.piaodoo.com/ python可以写游戏,但不适合.下面我们来分析一下具体原因. 用锤子能造汽车吗? 谁也 ...

  9. 企业架构(五)——联邦企业架构(FEA)实施指南

    文章目录 一.概述 二.效能改善生命周期 三.企业架构的开发和应用 1.架构级别 2.架构演进 (1)概述 (2)片段架构 ① 片段的识别和定义过程 ② 片段架构的开发和维护过程 四.企业架构过渡战略 ...

最新文章

  1. Python多线程学习(下)
  2. 【Linux入门到精通系列讲解】.bashrc 文件作用
  3. C#:委托和自定义事件
  4. python读取网站_科学网—python 获取网址 - 林清莹的博文
  5. vue 实现返回上一页不请求数据keep-alive
  6. 使用Spring Form标签探索Spring Controller
  7. nodejs学习—安装
  8. 对接微信支付服务商后商户能得到哪些服务?
  9. SPSS实现两独立样本非参数检验
  10. 软件质量(六大要素及其分析)
  11. 父母的房产继承买卖赠予以及网络红包代金券优惠券的国家最新税法规定
  12. 使用Number Insight和Java创建呼叫者ID
  13. oracle10g 学习笔记上
  14. 美团后端2020.4.23笔试题目
  15. 程序员思维僵化_僵化趋势
  16. 易基因 | 简化基因组DNA甲基化测序(RRBS)实验怎么做?
  17. 测试iphone硬件好坏的软件,如何检测Apple手机硬件是否损坏
  18. 苏宁小Biu系列产品大幅提升服务标准:亲儿子与干儿子不一样?
  19. linux中centos8.4配置静态ip
  20. 大数据项目实训总结_大数据实习报告.doc

热门文章

  1. wx.setStorage
  2. 精通Web Analytics 2.0 (12) 第十章:针对潜在的网站分析陷阱的最佳解决方案
  3. 安利一个好用的Golang单元测试框架:gocheck
  4. 分析网站SEO之友情链接
  5. saver.restore的一些问题
  6. 【安全】WEB安全测试检查清单
  7. 获取当前月的开始和结束时间-java,java8
  8. Go语言ORM框架:访问mysql数据库
  9. MyBatis中的jdbcType
  10. 全球与中国海绵钛市场深度研究分析报告