您当前的位置: 首页 >  动画

开发游戏的老王

暂无认证

  • 1浏览

    0关注

    803博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

虚幻引擎图文笔记:遇到了一个播放蒙太奇以后动画抖动的问题,并记录分析与解决过程

开发游戏的老王 发布时间:2021-02-07 21:03:19 ,浏览量:1

文章目录
    • 问题再现
    • 当前实现方法
    • 问题分析
    • 解决办法
    • 修正后的效果

问题再现

如下图,我使用摇杆操作游戏,角色在爬过墙角的一瞬间四肢会大概率出现抖动

在这里插入图片描述

当前实现方法
  • 墙面爬行部分使用了一个BlendSpace2D(见下图),混合了8个方向的墙面爬行动画,并使用我定义的两个Axis值(SpeedHorizontal和SpeedVertical)来确定混合空间的位置。
  • 转角部分使用了一个转角的蒙太奇动画,并且该蒙太奇动画是一个RootMotion动画。
  • 为了防止在角色转角(即播放蒙太奇)的时候,玩家对摇杆误操作,使角色出现错误的移动,使用了Disable Input屏蔽了玩家输入,等蒙太奇播放完毕,再使用Enable Input恢复玩家输入。

在这里插入图片描述

问题分析
  1. 蒙太奇结束播放,回到状态机,此时由于玩家输入被屏蔽了,所以SpeedHorizontal和SpeedVertical都是0,于是此时动画被定位在BlendSpace2D正中间也就是Idle的位置。
  2. 在玩家输入通过Enable Input被恢复之前,即输入被屏蔽的时候,玩家的摇杆可能已经被拨动,并且在Enable Input时很大概率还没有恢复到原位,因此Enable Input后的一瞬间SpeedHorizontal和SpeedVertical的值大概率都不是0,于是就产生了动画没有任何过渡的瞬间抖动。
解决办法

在播放蒙太奇时既要防止用户的输入使角色产生位移,又不能屏蔽摇杆对动画状态机的输入,那么之前那样简单粗暴第使用Disable Input是不可取得了,解决办法也很简单:

定义一个CanMove的布尔变量,把所有AddMovementInput节点前面都加上,把之前Disable Input的地方都替换成CanMove = false,把Enable Input都替换成CanMove = true

修正后的效果

在这里插入图片描述

关注
打赏
1656935939
查看更多评论
立即登录/注册

微信扫码登录

0.0387s