C/C++培训
美国上市C/C++培训机构

400-111-8989

热门课程

致敬经典,聊一聊仙剑奇侠传和C++的那些事儿

  • 发布:C++培训
  • 来源:C++资讯
  • 时间:2017-09-19 17:40

仙剑奇侠传是中国最为经典的武侠PRG游戏了,跌宕起伏的剧情,深入人心的人设,精心制作的画面。可以说是传承了一代人的青春记忆。

2017年5月23日,仙剑奇侠传7正式立项,并采用虚幻4引擎(UE4)制作。意图给广大仙剑迷打造一部画面更加震撼,运行更为流畅的作品。

炫酷的战斗场面,栩栩如生的人物形象,都是用C++编写脚本,应用动画系统实现的。

因为C++效率高、方便底层交互,所以目前能胜任大型3D游戏编写的编程语言只有C++,那么我们就来聊一聊如何用C++实现人物的动画效果。

一些游戏引擎会采用最简单的直播动画的形式(如Unity的Animation方案)仅支持简单动画播放和CrossFade;一些引擎会采用更高级的动画方案。

具备动画状态机和混合树的方案在如今基本是标配,但是不同引擎的实现也会有功能上的差别,例如Unity的Mecanim系统采用的是假的层次状态机和功能简单混合树(无法插入功能性节点)

△仙剑5和仙剑6皆采用U3D编写

而UE4的Animation Blueprint就高级很多,可以在混合树插入很多功能性节点(如IK),同时让可视化脚本能够很方便地控制动画行为。

△仙剑7用虚幻4制作

骨骼动画的想法来源于人体骨骼。例如说,人的上肢所有肌肉和皮肤都受上肢骨胳的影响,而人的踝关节则分别承受小腿骨胳和脚骨的影响。

这个概念的本质上是记录了以树形结构存储的一系列对象的位置、旋转、缩放随着时间变化的动态,其中的每一个对象就是一根骨骼。

在游戏引擎中,骨骼动画通常以两个形态存在,原始数据和转换后数据:

原始数据储存了最适合用户进行动画编辑制作的数据,比如3DMax导出的FBX格式动画,或是Unity中使用动画编辑工具制作的动画。这类数据格式简单,并且不做压缩,比如使用单独的Track来储存位移、旋转、缩放的XYZ三个通道。原始数据可以直接用于编辑和播放,但是内存开销和CPU开销通常较大,所以一般不这么做。

△仙剑五中的一个3D模型

转换后数据储存了对原始数据进行加工后的版本,通常在游戏引擎的导入资源阶段会进行数据转换处理。转换后的动画数据通常经过压缩,使其内存开销和CPU开销降低。转换后数据可以直接用于动画播放。

动画的播放,根本上来说就是依照时间对动画进行采样,将Pose等采样结果输出。因而,要想对动画进行播放,我们首先得定义动画的采样结果。

动画的采样结果包含如下几个部分的信息:

Pose信息

RootMotion信息

动画播放状态

Rig标识

RootMotion从字面上来说,就是“根节点的运动”,事实上它表示的是动画驱动游戏对象运动。

不同的动画系统对于RootMotion的实现方式略有不同:Unity引擎通过分析人体骨骼动画来计算角色的运动,UE4采用角色根骨骼运动作为角色运动参考,Morpheme采用额外的Trajectory骨骼来作为角色运动的参考。

△动画系统处理后的默认动画图

只有默认动画是没有什么实际用途的,还需要编写一段脚本来控制人物切换动画。

让我们看一下效果图

(1)

(2)

(3)

(4)

以上就是运用C++实现人物的行走,打斗,技能释放等等动画效果的一些基本知识了,不得不说,仙剑奇侠传作为一部火了十几年的经典游戏,其制作思路和制作方法都非常值得当今的游戏开发者借鉴和学习的。

当然,制作仙剑奇侠传这样的大型游戏需要有相当深厚的C++功底,对于初学者而言,大型3D游戏太过晦涩高深,直接去编写这种高难度的肯定不是一个合理的选择。

就像我们常说的不能一口吃成个胖子,当我们还只会走的时候,就应该努力把每一步踏的坚实,这样才能在以后的路上健步如飞。

我们可以从一些相对简单的游戏做起,2048就是一款十分风靡的益智类小游戏。

在编写过程中,我们会运用到数组、界面处理、AI算法等相关知识,能够让初学编程的人在游戏中就能够练习到C++语言的知识,让学习变得更有意思和趣味。

那么为了帮助更多的开发者,我们特地邀请到行业内享有名气的美女老师小小,免费在腾讯课堂给大家上一堂知识分享课,聊一聊如何用C++实现游戏2048。


预约申请免费试听课

上一篇:TIOBE 9 月排行榜:Java,C,C ++ 三分天下何时休
下一篇:从学好C语言开始向着目标出发

9月送福利,达内免费训练营报名啦!

表白程序 | C语言撩妹法

C语言短笑话,最后一个可以我可以笑一年!

若可以只教++部分, 不教C部分, 那C++会是很好的教学语言

选择城市和中心
贵州省

广西省

海南省