金行健:什么是架构?Untiy开发游戏使用什么架构合适?

我翻开知乎查看游戏架构浏览,这问题没有专门答案,歪歪斜斜的每页上都写着"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包而已。框架的优缺点的评论,也完全取决于其对问题解决程度和解决方式的优雅性的评论。所以,千万不要为了学习框架而学习框架,而是要为了解决问题 而学习框架,这才是一个程序员的正确学习之道。

这段话适用于游戏开发。

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

(0)

相关推荐

  • 架构整洁之道

    目标 用最少的人力成本满足构建和维护该系统的需求 衡量指标 版本迭代 -- 工程师团队规模 版本迭代 -- 代码总行数 版本迭代 -- 代码变更行数 软件系统的价值 行为价值 按需求文档编写代码 可用 ...

  • 回顾Bob大叔的简洁架构

    Robert Martin 就是我们常说的Bob大叔,是码界的骨灰级人物了,在4年前提出了所谓的简洁架构,值得回顾反思一下,看看是否可以借鉴到微服务中呢? 大叔在文中介绍了一下几种知名的架构思想: A ...

  • 如何做自动化测试

    这个话题比较大,相信大家也都有自己的想法,我在这里写一些我自己的看法,请大家指教. 什么叫做自动化测试工程师 首先,会使用自动化测试工具的测试人员不能够称之为完全的自动化测试人员,这类测试人员被称为『 ...

  • 汽车研发:整车架构的开发与研究!

    汽车架构就像人的骨架,在一个骨架好了,怎么着也不会丑,更不会差,就像下面这位小姐姐,觉得自己的骨架不够好,去医院削削骨,就变得漂亮.性感了! 悄悄的告诉大家 漫谈君喜欢 "纯天然" ...

  • 莲花汽车将开发下一代BEV架构,称为LEVA轻型电动汽车架构

    莲花宣布与合作伙伴一起,将开发一种全新的下一代电池电动汽车(BEV)架构,因为该项目已获得英国政府的资助. 该项目的名称:轻型电动汽车架构(LEVA),已经从名称上明确表明,主要关注点是使电动汽车更轻 ...

  • 利用python开发游戏

    今天我们利用python的tkinter来制作几个简单小游戏 首先我们了解下tkinter Tkinter: Tkinter模块(TK接口)是Python的标准Tk GUI工具包的接口.Tkinter ...

  • 他们开发游戏,却永远无法进入制作人员名单丨触乐

    如果在游戏开发完成之前就离职-- 2012年6月的一天,在<GTA5>开发期间,Rockstar North的一位部门主管让50多位合同到期的员工第二天来公司一趟--那些人已经习惯了这种节 ...

  • 左右脑开发游戏,提高孩子智商#涨知识 #思维训练 #智商 @DOU 小助手 @抖音短视频

    左右脑开发游戏,提高孩子智商#涨知识 #思维训练 #智商 @DOU 小助手 @抖音短视频

  • Level3及以上自动驾驶的汽车架构和开发模式变化

    楼主基于自动驾驶应用场景分别从E/E架构.通讯方式.软件架构和流程标准等方面谈下与当前模式相比可能加强的方面和涉及的变化,当我扯淡,欢迎拍砖. 汽车E/E架构:分布式->域集中->中央计算 ...

  • 【高可用架构】开发机上部署Deploy项目(一)

    准备 部署项目的细节可以看这个,传送门Centos 7部署Laravel项目 主机IP:192.168.10.17 [高可用架构]系列链接:待部署的架构介绍 演示 部署Deploy composer ...

  • 直播软件APP开发使用的直播架构要靠什么来决定

    直播架构的选择决定了直播软件APP开发会使用什么样的内容传输方式,针对弱网络环境下的用户使用体验,能否在弱网下仍然保持视频的质量非常关键.而直播架构正是为了帮助网络传输而出现的,我们先来看一下常见的三 ...

  • 如何做好整车开发的平台与架构?

    IATF16949服务平台 汽车行业专业知识库 本文分析整车产品.平台.架构和它们之间的关系.指出架构战略的推出,使平台概念得以拓展和向前延伸,从"共用零件"升华到"共同 ...