原创: Jerish, 微信公众号——游戏开发那些事

这篇文章是为我的《Exploring in UE4》移动组件详解[原理分析] 做科普的。

从红白机时代的超级玛丽,到PC时代CS里面的反恐精英,再到如今主机上栩栩如生的“荒野大镖客”。随着技术的进步,游戏中的这些角色,在移动的表现上愈加真实。

我们会想,为什么有些游戏中的人物,移动起来非常不自然?而有些制作精良的游戏里,每个角色动起来都栩栩如生。这些角色是如何在我们游戏世界中移动的呢?今天这篇文章就会简单的给大家分享一下,游戏角色在游戏世界中的移动原理。

游戏世界——真实世界的复制版

谈到移动,首先不得不谈一下我们游戏中的世界。游戏世界分为2D世界和3D世界,不妨先从3D游戏的世界说起。3D游戏世界是一个三维立体世界,和我们和现实中的世界相似,我们游戏中的所有角色,都会在这个三维的世界里面出生、移动、交互直至死亡。除了角色以外,游戏中的其他对象也是如此产生的,比如说建筑、武器、道具等等。他们身上都保存着自己的坐标位置,当我们在移动我们的角色的时,其实就是在不断的修改当前角色的坐标值。
对于2D游戏,原理要简单很多,所有物体都存在于一个平面世界,他们的移动也只是改变其X,Y两个坐标轴而已。

移动效果 ≠ 动画效果——有动作不代表有位移

现在,让我们再把焦点放在角色的移动上。这里先抛出一个问题,当我们看见一个角色在奔跑时,他真的是在移动么?

很多人可能会说这不是理所当然的么?难道还能原地跑么?没错,游戏中的角色还真就可能是原地奔跑。事实上一个角色的移动和你看见他做什么动作是没有直接关系的。因为在游戏里面,移动表现“不等于”动画表现。不妨看一下下面这张图

图中的这个角色一直在播放移动的动画,但是并没有产生一丁点的位移,因为没有任何逻辑去修改这个角色的位置。

动画-——像拍电影一样把动作连起来

说到这里,我们引出了一个新的游戏概念——动画,那么如何理解游戏中的动画?为什么播放动画不会修改玩家坐标呢?
所谓动画,其实就是角色行为的一种表现方式,和电影或者动漫一样,将一个对象在一段时间内的动作记录并播放,就是一个完整的动画。游戏中针对每个角色都需要美术去单独的为其制作很多段动画,导入到游戏引擎中进行混合与切换,最后实现游戏中的效果。比如说,角色在跑步时有跑步的动画,跳起来会有跳跃的动画,战斗会播放战斗的动画,这些都是不同的动画片段,需要美术们去提前制作。

动画其实也是分为2D动画与3D动画的,以前的游戏都是2D游戏,本质上和我们小时候看的小人书一样,给一个角色创建多张图片,每张上的图片都有着不同的动作,将这些图片连在一起播放就是一个2D动画。

不过与2D动画将每一帧的画面记录下来不同,3D动画记录的角色的3D坐标数据。目前的3D动画实现方式都是由骨骼+蒙皮来做的,也就是说其实我们的每一个角色身上会有一些骨骼,当我们执行某个动画时对应的这些骨骼位置就会发生变化,然后再驱动这个骨骼的“蒙皮”(可以认为我们玩家的皮肤)变化。比如说,一个玩家把手举起来的时候,我们手臂对应的骨骼就会动起来然后包裹着他外面的皮肤也会随之移动,这样你就能看到一个真正的动画了。那么为什么他执行动画的时候不会移动呢?因为所有的动画默认都是相对他自身变化的,相对游戏世界他就是原地静止的。(其实也可以做到相对世界发生变化,这个概念叫RootMotion,在后面的文章里面会进一步讲解)

我们的角色在播放移动动画的时候,其实就是一个循环的动画,你可以看到这个角色的两个腿在不停的走动,手臂也在不停的摆动,但是它只是在不断的播放一个动画。只要处理好动画的开头与结尾就能很好的表现出角色的移动。

移动——有“人”暗中操作

了解了动画与移动的关系,我们现在就知道驱动角色移动的其实另有其人。不过这个“人”是谁呢?其实这个“人”是谁并不重要,任何一个能做这个工作的对象都可以成为这个“人”,你把它交给地上的一块石头去处理也是可以的。在代码里面,我们可以随意抽象出来一个“移动控制者”,他的工作就是控制角色如何在游戏世界里面移动。

现在假如我们给他一点点移动速度(比如每秒0.1m),如果这时候他的动画时迈开步子疯狂地跑的话,就会发现动画与速度是不匹配的。同理,如果把动画调成走路的样子,而速度改为10m/秒,就会发现他一步还没迈出去就已经滑到对面墙上了,这就是我们平时所说的滑步现象(不过没这么夸张),也是很多游戏里面看起表现很差的原因。只有将速度与动画完全匹配,才能让游戏角色移动看起来非常自然。

当然,真实的情况可能要比这个还要复杂很多。我们的角色在一开始可能还正在缓慢的行走,不一会儿之后就突然开始加速跑了起来。为了模拟真实世界中的移动的样子,我们需要对他的这个移动的过程要做各种精确的模拟,比如说行走、奔跑、甚至是游泳、飞行,不同的状态需要以不同的方式去模拟。对于更加真实的游戏,我们还应该把物理也考虑进去,重力、摩擦力、阻力等等都会影响角色的移动,不过任你怎么复杂核心就是两点——速度与加速度。一般来说,包含了上面这些逻辑的模块我们可以称之为移动系统。同时,由于我们的速度发生变化,还需要动态的修改对应的动画,这个匹配的处理以及播放的逻辑所在的模块我们称为动画系统。如果说,角色的移动是通过你的键盘按键触发,那还会涉及到一个输入系统,输入系统会根据你的按键时长转换成对应的移动速度或者是加速度,具体的转换方式要看游戏的设计逻辑。

到目前为止,如果你认识到了移动表现=动画系统+移动系统,你已经基本理解了游戏角色的移动原理了。现在,不妨再稍微拓展一些。一般美术在制作动画时只会制作走路的动画以及奔跑的动画,他不会制作一个0.5/m的走路动画然后又制作一个0.6m/s的走路动画,如果每个速度都要做一个动画的话美术肯定要累死。那游戏中的玩家,在走路和奔跑切换时该怎么处理呢?答案就是把奔跑动画与行走动画进行融合,根据速度的不同,去混合这两种动画,我们可以称之为blend space,参考下面的图片。

对于游戏质量比较高的3A大作,他们的动画远远不只这么简单,除了有基本的走的动画,还有各种方向的转身动画,包括左转和右转,斜着转,总之各个方向都有一个动画,然后通过很多动画的融合,才能达到一个非常流畅的一个表现效果。而且,移动系统的逻辑也需要模拟的非常精确,来和这些动画达到完美的匹配。

移动同步——告诉他你在哪

最后,我们再来简单谈谈移动的同步。当我们在玩网络游戏时,你会在你的显示器上面看到多个其他的玩家并且可以看到他们在移动,那这个过程中他是怎么样做的呢?这在游戏设计中有一个专有名词,叫做网络同步,网络同步是游戏领域里一块非常重要也很复杂的一个功能。简单来说,当其他玩家在移动的时候,他需要把他的坐标实时的通过网络发送到你的客户端,你就可以看到他在你的客户端上移动。在游戏开发中,发送的频率,发送的内容以及发送方式的不同的都会影响到游戏的具体表现,可以参考我在文章一开始提到的UE4移动分析的文章。

游戏中的角色是如何“动”起来的?相关推荐

  1. 游戏中的角色停止,时间停止

    游戏中的角色停止,时间停止 最近遇到一款很喜欢的游戏-<TimeLocker-Shooter>,翻译是"时间凝固-射击". 游戏介绍很简单:当你停止,时间停止 .操纵时 ...

  2. 游戏中的角色渲染技术之皮肤篇

    原文链接https://blog.uwa4d.com/archives/Usparkle_Skin.html 这是侑虎科技第253篇原创文章,感谢作者洛城供稿,欢迎转发分享,未经作者授权请勿转载.当然 ...

  3. 三维游戏中的角色动画

    为体现游戏的真实性.艺术性,动画效果一般都是由专门的动画师利用特定的软件提前制作完成,在游戏运行阶段,由游戏引擎对这些动画按照游戏的逻辑.用户输入等条件进行控制,有效地播放出来.当然,也有一些动画效果 ...

  4. 第五周项目二-游戏中的角色类(1)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年3月29日 *版 本 ...

  5. 横板闯关游戏中的角色移动

    前言 在很多2D游戏中,都会涉及到角色移动,跳跃等操作,最典型的就是横板闯关游戏.例如经典的魂斗罗.三国战纪等.这两款游戏在地图移动和角色行走的方式中唯一的不同就是魂斗罗是没有纵深的那种. 看似简单, ...

  6. 2022.1.28 力扣-每日一题-游戏中弱角色的数量

    题目描述: 你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 .给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defense ...

  7. MIT教授: 世界就是《黑客帝国》,人类在模拟游戏中扮演角色

      转载于 新智元   编辑:元子 MIT教授认为我们目前有50%-100%的概率生活在<黑客帝国>那样的计算机模拟世界中,所谓现实可能不过是一种幻觉.而距离我们创建自己的模拟世界,最多需 ...

  8. 如何用Unity3D实现游戏中的角色换装?

    换装系统是游戏中较为常见的功能,我们给它一个专业词avatar,可以做到装备与人物分离,实现自由换装效果.我们可以将头部.身体.手.脚.武器独立建模.贴图,利用avatar来动态换装,实现各种搭配.实 ...

  9. 人工智能在《LOL王者荣耀》游戏中的角色

    近期LOL和王者荣耀游戏已经充斥着真个朋友圈,但是谁又知道在火热的游戏进行中,又有一批批IT男在完成另一项重要的任务,那就是利用深度学习的知识去完成游戏直播的智能化,给现场欣赏比赛的观众不一样的感受. ...

  10. Unity-BattleStar丨6. 动画系统-让BattleStar游戏中的角色动起来

    文件下载:地址 项目目标:实现NPC防御和踢腿动作 一.导入模型 1.新建一个空项目,导入Cha07.unitypackage,打开Scenes里的BattleStar_GuideScene并进入,点 ...

最新文章

  1. python的scrapy框架的安装_Python3环境安装Scrapy爬虫框架过程及常见错误
  2. 从源码搭建PCL1.7.2+vs2015+win10
  3. NLP 训练及推理一体化工具(TurboNLPExp)
  4. GitHub的嵌入式开源项目
  5. 值类型与引用类型数据运算
  6. 8篇文章系统梳理ARM开发中的文件类型
  7. Bailian2815 城堡问题【DFS】
  8. 爬虫python能做什么-Python 爬虫一 简介
  9. 机器学习【四】决策树
  10. 听说你在生产环境下还没关闭Swagger2,算你猛
  11. 查看游戏帧数:FPS的软件
  12. 《2018版-业余无线电(相关频率)对照表》
  13. HTML5期末大作业:中华美德网站设计——中华美德(6页) HTML+CSS+JavaScript web大作业 静态网页
  14. 服务器有无线网卡么,全面认识服务器网卡:理论篇
  15. Redis——过期时间/过期回收策略
  16. 微型计算机3月2017,2017年3月计算机一级基础及MSOffice强化习题
  17. 哪个CMS建站系统更利于seo优化
  18. Nvidia GPU的浮点计算能力(FP64/FP32/FP16)
  19. php模拟登陆正方教务管理系统(thinkPHP5.0)
  20. Web 基础——Nginx(二)

热门文章

  1. 计算机ppt音乐,ppt背景音乐_适合ppt播放的轻音乐
  2. 2021-12-28学习的道路是寂寞的,学成后的成绩是惊艳的。喜欢热闹是生物的本性,耐得住寂寞方显人性尊贵
  3. 微信文章如何自动排版
  4. 28. 移动端touch触摸事件
  5. Synopsys系列工具的基本概念
  6. ppt讲解中的过渡_PPT「过渡页」怎么设计才好看?
  7. SIRO Challenge 状态压缩 + DP 未解
  8. 新品周刊 | 雀巢脆脆鲨推出坚果巧克力威化;金宾波本威士忌推出父子合作酒品...
  9. mysql 夏令时_MySQL日期时间字段和夏时制-如何引用“额外”小时?
  10. windows系统引导配置命令