人气 289

[图文教程] 游戏中的角色是如何“动”起来的? [复制链接]

九艺网 2021-2-10 09:15:57

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
105443m0q38qs3p4s0yy6a.jpg
游戏世界

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

105443g66i661vxh7o6i9w.jpg
-有动作不代表有位移-

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

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

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

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

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

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

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

移动

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

105656o0ki14if0u42zuhn.gif


105659bjbjt5jb6n8ww9jn.gif

105448syjpf88yzgjbcnjn.gif

移动同步

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

作者: Jerish  
来源:游戏开发那些事
原地址:https://mp.weixin.qq.com/s/UI7JPo4NYW58MTf5X9lgHg

105657mmvstzed9qm2emve.gif
105447f66wvkvv6vyvwwn6.gif
105446q3kasmlrak1vwvex.jpg
105445cjg33tsgb9gq9gqa.jpg
105445irgrbr8kp9rq9rrm.gif
105444zgfl6sexee1a15w6.gif
105657mmvstzed9qm2emve.gif
105448syjpf88yzgjbcnjn.gif
105659bjbjt5jb6n8ww9jn.gif
105656o0ki14if0u42zuhn.gif
105447f66wvkvv6vyvwwn6.gif
105446q3kasmlrak1vwvex.jpg
105445cjg33tsgb9gq9gqa.jpg
105445irgrbr8kp9rq9rrm.gif
105444zgfl6sexee1a15w6.gif
105443g66i661vxh7o6i9w.jpg
105443m0q38qs3p4s0yy6a.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-27 02:10 , Processed in 0.143994 second(s), 27 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.