85
回答
OSCHINA 第 45 期高手问答 —— 游戏引擎架构
极速云服务器,低至1.04元/天>>>   

OSCHINA 本期高手问答(2月20日-2月27日)我们请来了 @MiloYip 叶劲峰 为大家解答关于游戏引擎架构方面的问题。

@MiloYip 叶劲峰,从小自习编程,并爱好计算机图形学。上中学时兼职开发策略RPG《王子传奇》,该游戏在1995年于台湾发行。其后他获取了香港大学认知科学学士、香港中文大学系统工程及工程管理哲学硕士。毕业后在香港理工大学设计学院从事游戏引擎及相关技术的研发,职至项目主任。除发表学术文章外,也曾合著《DirectX9游戏编程实务》。2008年往上海育碧担任引擎工程师开发《美食从天而降(Cloudy with a Chance of Meatballs)》Xbox360/PS3/Wii/PC,2009年起于麻辣马开发《爱丽丝:疯狂回归(Alice: Madness Returns)》Xbox360/PS3/PC,2011年加入腾讯互动娱乐引擎技术中心担任专家工程师,所研发的技术已用于《斗战神》、《天涯明月刀》、《众神争霸》等项目中。

为了鼓励踊跃提问,@博文视点 会在问答结束后从提问者中抽取 5 名幸运会员赠予《游戏引擎架构》一书。

样章试读,如果对此书有兴趣可点击这里购买。

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。下面欢迎大家就游戏引擎架构方面问题向 @MiloYip 叶劲峰 提问,请直接回帖提问。

举报
红薯
发帖于4年前 85回/18K+阅
共有85个答案 最后回答: 4年前

@MiloYip :

1.如何设计跨平台的游戏引擎?(PS3/XBOX360/3DS/PSV或者ANDROID/IOS)

2.2D游戏引擎和3D游戏引擎架构的重要区别?

3.ACT,STG,RPG,AVG,FTG这些不同类型的游戏,是游戏类型决定了引擎还是引擎决定了游戏类型?

4.是否有开源的游戏引擎用于商业产品的?如果有,是否可以介绍一两个案例?

5.游戏引擎在设计的过程中,对于性能是如何考虑的?

--- 共有 6 条评论 ---
Sephiroth回复 @MiloYip : 十分感谢给予解答! 4年前 回复
MiloYip5. 性能是一个极重要的考虑因素。有时候游戏的一些需求是受性能所限制的。例如一些国战游戏中会出现大量同屏玩家,那就必须花很大的精力去优化角色动画及渲染。以设计来说,现时很重要的一个部分是多线程的处理(第7.6节),而数据结构(第5.2节)、内存分配(第5.3节)等机制对性能也有很大影响。对于运算量大的地方,要考虑SIMD指令集(第4.7节)。 4年前 回复
MiloYip4. 有。OGRE用于许多3D网游商业项目。Cocos2D-x就用在许多手机2D游戏项目中。 4年前 回复
MiloYip3. 游戏的类型受到硬件及技术上的限制。我们可以为了开发某个类型的游戏而开发独特的引擎,也可以反过来看看可以使用的引擎适合做什么游戏。但现时许多引擎的通用性是比较好的,只有一些玩法较特殊的游戏才必须特别的引擎(例如Where's my water)。 4年前 回复
MiloYip2. 2D游戏的图形资源、场景管理、渲染等通常都会较为简单,通常不使用光照、材质系统,除了部分2D游戏使用骨骼动画系统,其他大部分2D游戏都没有动画系统。物理方面,2D的碰撞检测及刚体动力学模拟都较为简单,原因主要是2D的旋转运动比3D简单得多。 4年前 回复

@MiloYip : 魔兽世界它的游戏架构是怎样的..  ??

   都用到哪些技术呢.?  

--- 共有 1 条评论 ---
MiloYip我先把范围缩窄至客户端吧。除了大部分三维网游都需要的子系统(图形、音频、人体学接口设备、GUI、碰撞检测、资源管理、网络通讯),WOW比较有特色的是开放了UI方面的编程,让玩家可以编写插件(AddOn)。另外WOW是无缝地图,除了要考虑串流载入资源,还要用特别的方式去处理坐标系统,例如不能简单地用3个float去表示物件的位置。 4年前 回复
@MiloYip :请问游戏开发如何针对高并发进行优化和处理?
--- 共有 1 条评论 ---
MiloYip如果以单机游戏/网游客户端来说,现时主要是每个子系统运行于独立线程(第7.6.4节)及作业模型(第7.6.4节)。后者是较为推荐的,因为可以较容易扩容至不同数目的CPU核心。但最困难的其实是在游戏性编程中采用异步程序设计(第7.6.6节),因为这样会使逻辑变得复杂。可以考虑使用coroutine或类似的技术去隐藏部分细节。 4年前 回复
@MiloYip : 类似clash of clans 这类游戏 它的寻路 是如何做的呢? 主要是地图预处理 这块的优化算法 有哪些呢?谢谢
--- 共有 1 条评论 ---
MiloYip传统的寻路算法是A*,对于较静态的场景,可以采用缓存及预计算等方法减少重复计算。 4年前 回复
@MiloYip :请问腾讯开发的天天飞车等手游,都是用啥引擎开发的?是腾讯自己写的引擎吗?谢谢
--- 共有 3 条评论 ---
MiloYip以下我并非为本公司发言,只是从一般的角度去表达我的看法。在技术上,即使使用跨平台的引擎,也需要对不同平台做一些平台专门的整合、适配以至优化,所以是有一定的开发及维护成本的。而在非技术层面上,公司及项目团队要考虑市场、营运成本等各方面因素。 4年前 回复
Dwight回复 @MiloYip :不好意思,问个和主题没多大关系的问题。既然腾讯的手游基本是用跨平台的引擎开发的,但为什么wp系统上没有见过,是要放弃这部分用户吗? 4年前 回复
MiloYip有一些使用Unity,有一些基于Cocos2D-X进行扩展。 4年前 回复
@MiloYip :引擎和游戏整体的关系是什么?起到的作用是什么?是不是有了引擎,在此基础开发多少个类似的游戏都很容易?
--- 共有 1 条评论 ---
MiloYip以一个游戏产品来说,引擎是其中的一个重要的技术部分。多个游戏若能共享这一部分,就能节省开发时间及成品。可以比喻为,若合适的话,多款汽车可以使用同一款引擎,而不用为每款汽车重新设计引擎。具体可以参考样章中1.3节〝游戏引擎是什么“。 4年前 回复
@MiloYip :我是外行,以前了解到游戏中会应用到人工智能,请问在实际的开发中这方面是如何考虑的,应用在哪些场景中,游戏引擎在这方面是如何提供解决方案来提高编程效率的,谢谢
--- 共有 2 条评论 ---
Liuzh_533回复 @MiloYip : 上午我就没看到样张地址,现在找到了。。谢谢。 4年前 回复
MiloYip人工智能在游戏中的应用分开几个层次。最底层的是一些寻路、可见性测试、游戏对象查询(14.5.4节)等功能,较上层的是个体的行为模拟(如使用有限状态机/FSM、行为树/behavior tree),再上层的有团队的协作。其他方面还有机器学习(machine learning)、计划(planning)等,但较少用于游戏中。 4年前 回复
@MiloYip :你好!我问的不是一个技术方面的问题,我想自学3D游戏开发,对游戏这快了解不深!对我来说是一个算新的领域吧,能否推荐几本比较好的书籍。谢谢!
--- 共有 2 条评论 ---
小洋哥回复 @MiloYip : 谢谢哈 4年前 回复
MiloYip如果想快一点学习一些基本的游戏开发原理,可以考虑学习一些商业引擎/工具,例如免费的Unity是一个不错的入门方式。然后想做扩展、优化,或是希望自己开发引擎,可以阅读本书。 4年前 回复
@MiloYip :我是WEB开发,我想问如果出于自己娱乐的目的来开发自己的小游戏。选择什么技术比较合适? 不至于因为前期太复杂而打消自己的积极性。
--- 共有 3 条评论 ---
MiloYip2D的話較流行的是cocos2D-x,3D的有OGRE 4年前 回复
yongzhong回复 @MiloYip : unity似乎只能用C#和JS开发,windows平台和家用机平台更多的使用C++在开发是吗?如果想学C++游戏开发的话应该用什么引擎来入门? 4年前 回复
MiloYip如果熟悉web前台技术,可以考虑直接使用HTML5来开发一些小型的2D游戏。3D游戏的话,现时最简单的入门工具大概是免费的Unity。 4年前 回复
@MiloYip :你好,问个不是游戏引擎架构的问题,我也想学游戏开发,能否谈谈对学习游戏开发怎么规划学习任务
--- 共有 1 条评论 ---
MiloYip首先从简单开始。可以考虑clone一个简单的游戏,例如三消类的。当中也会学习的一些重要的概念,例如游戏循环。可以慢慢打磨、改善那个游戏。然后,可以尝试创作原创游戏。 4年前 回复
顶部