滑步处理 - 让动画脚步和移位一致
创始人
2025-06-01 02:20:05
0

游戏制作中,通常的做法是让动画播放跑步或者其他移动动画,然后让刚体跟着移动,这样就会出现不匹配现象,看起来角色看起来像滑冰一样。

Unity的动画本身有一个叫做ApplyRootMotion的东西,我么可以利用他让人物移动看起来一脚一个脚印的行走。

我们的制作原理就是把动画移动的位移数据获取到,然后利用这个位移信息进行移动。

动画处理

首先把要移动的动画要改成带位移的动画
请添加图片描述
我们来到动画的属性,需要修改Rig
在这里插入图片描述
下拉里选择CopyFromOtherAvatar,并且Source选择模型的Avatar。

来到Animation标签,这里是重点
在这里插入图片描述
对于行走动画,我们需要勾选LoopTime , LoopPose
RootTransformRotation和RootTransformPosition(Y)旋转我们不需要,所以直接勾选BakeIntoPose。
我们保留RootTransformPositionXZ。

其他移动的动画也是如此,待机动画因为不需要他有位移,所以idle我们全部勾选
在这里插入图片描述
设置完成后我们可以看下动画是否有问题
请添加图片描述

我们可以看到角色进行了移位,那么动画就设置完毕了。
动画控制器这里不说了,不是本文重点。

动画控制器设置

首先我们在Animator组件勾选ApplyRootMotion。
在这里插入图片描述

然后增加新的脚本,我这里命名TCharacterAnimation

	private void Awake(){animator = GetComponent();}void OnAnimatorMove(){fixedDeltaTime += Time.deltaTime;fixedDeltaPosition += animator.deltaPosition;fixedDeltaRotation *= animator.deltaRotation;}

保存脚本后,我们发现Animator发生了变化。
在这里插入图片描述
表示现在是由脚本来接管了。

动画控制脚本

通过获得Input或者其他输入,赋值给inputXZ变量前后和移动

    Vector3 moveDirectionVelocity;public float smoothAccelerationTime = 0.2f; // The smooth acceleration of the speed of the character (using Vector3.SmoothDamp)public float linearAccelerationSpeed = 3f; // The linear acceleration of the speed of the character (using Vector3.MoveTowards)void CheckAni(){MovieMove = Vector3.SmoothDamp(MovieMove, inputXZ, ref moveDirectionVelocity, smoothAccelerationTime);MovieMove = Vector3.MoveTowards(MovieMove, inputXZ, Time.deltaTime * linearAccelerationSpeed);//Vector3 dir = MovieMove;// transform.InverseTransformDirection(MovieMove);animator.SetFloat("velocity_X", MovieMove.x);animator.SetFloat("velocity_Z", MovieMove.z);}

这里的SmoothDamp,MoveTowards是一个让输入的数据进行渐变过渡,当然你可以直接把inputXZ传入动画。有过渡会丝滑一些。
动画参数velocity_X和Z是左右移动和前后移动。

玩家控制器脚本

这个脚本就是核心了,我们需要获取到动画数据进行移动

void FixedUpdate()
{nowVelocity = charAnimation.fixedDeltaTime > 0f ? charAnimation.fixedDeltaPosition / charAnimation.fixedDeltaTime : Vector3.zero;charAnimation.fixedDeltaTime = 0f;charAnimation.fixedDeltaPosition = Vector3.Zero;rig.velocity = nowVelocity;
}

网络同步

如果需要网络同步,我没有找到找到参考办法,我是这样处理的。
同步玩家的Input操作x和z的值。在进行处理,会出现一定的跟不上,我补充了位置同步,做一个位置慢慢的跟上的操作来弥补位置偏移。

		inputDir.x = hero.player.recInput.x;inputDir.z = hero.player.recInput.y;animator.SetFloat("velocity_X", inputDir.x);animator.SetFloat("velocity_Z", inputDir.z);
		float movSpeed = MoveSpeed * Time.deltaTime;thirdToPos = charAnimation.fixedDeltaPosition;// charAnimation.fixedDeltaTime = 0f;charAnimation.fixedDeltaPosition = Vector3.Zero;//movePos是同步过来的位置数据movePos += thirdToPos; //位置慢慢的跟上的操作来弥补位置偏移//这里需要调整速度,不能太快了transform.position = Vector3.Lerp(transform.position, movePos, movSpeed * 1.5f);

转身

对于转身,可以在Idle增加Turn属性来
在这里插入图片描述
转身需要勾选Position(Y)改为Feet,还有Position XZ
在这里插入图片描述
转身角度计算可以通过头部和身体的角度计算,超过一定数值,开启转身

	public float GetAngleFromForward(Vector3 worldDirection){Vector3 local = transform.InverseTransformDirection(worldDirection);return Mathf.Atan2(local.x, local.z) * Mathf.Rad2Deg;}float angle = GetAngleFromForward(hero.refParm.headDriect_actor.forward);float nowTurn = Mathf.Lerp(animator.GetFloat("Turn"), angle / turnAngle, Time.deltaTime * turnSpeed);animator.SetFloat("Turn", nowTurn);

到这里就按脚步移动就结束了。
另外还有一些其他技术例如motion matching。

这里有一些参考:
视频教程
好用的插件 FinialIK,这里有个下载,商用请支持Z版

相关内容

热门资讯

“威驰”造句 1、 结论威驰搽剂是一种安全性较好的外用制剂。2、 介绍了威驰轿车制动防抱死系统的结构、工作原理及性...
使用既不和也不进行造句 使用既不和也不进行造句  造句指懂得并使用字词,按照一定的句法规则造出字词通顺、意思完整、符合逻辑的...
形容人年龄的词语 形容人年龄的词语  新词典词语丰富,信息量大。词是由语素组成的最小的造句单位。词语有2字、3字及4字...
忌妒的解释和造句 忌妒的解释和造句  忌妒拼音  【注音】: ji du  忌妒解释  【意思】:<轻>对才能、名誉、...
“遐想”造句 51、走过深秋,冬天又将如约而至,心里不由有了一种向往的喜悦。或许“瑞雪兆丰年”的预言应证着自已人生...
“闭月羞花”造句 1、善良,不是容颜的闭月羞花,不是举止的温文尔雅,不是财富的腰缠万贯;更不是权势的叱咤风云。善良,是...
“亏本”造句 51、 当蚕农都在担心当年养蚕要亏本时,蒋建明仍然按每公斤18元的保护价收购蚕茧,保护了养蚕户的利益...
用从容不迫进行造句 用从容不迫进行造句  1、他拥有的胆识是一般人没有的。他时时刻刻都有可能会被发现,但他仍旧从容不迫地...
“难乎其难”造句 1、通货紧缩使美国人卸掉沉重的债务包袱变得难乎其难。2、约拿传道的情况也实在难乎其难。3、一个一直被...
“不要让”造句 51、 不要让任何人告诉你要成为怎样的人。做与众不同的人。追随自己的感觉。52、 树立人人珍惜水,人...
振聋发聩造句-成语造句 振聋发聩造句-成语造句  1、由于门开着,机器的噪音几乎振聋发聩。  2、这个炮垒的大炮接连不断地射...
耳提面命的意思和造句 耳提面命的意思和造句  耳提面命是指不但当面告诉他;而且揪着他的耳朵向他讲。形容严厉而又恳切的教导。...
求助的造句 求助的造句  求助拼音  【注音】: qiu zhu  求助解释  【意思】:请求援助。  求助造句...
不假思索怎么造句 不假思索怎么造句  每个人都用过不假思索造句,下面就由小编为大家整理不假思索怎么造句的内容,欢迎大家...
用成语可歌可泣造句 用成语可歌可泣造句  1、男二号人狼坚决捍卫自己的爱情,誓死保护女主角的精神可歌可泣!  2、全国广...
连…也…造句   1、他连最简单的题也做不出来。    2、我长途跋涉,连走路的力气也没有了。    3、他心情不...
万象更新解释造句   遣词造句不仅是语感培养的重要策略,同时也是写作基础。所以同学们平时要积累并要多做一些练习。以下小...
“字幕”造句 101、2014年12月20日,人人影视字幕站宣称正式关闭。102、近日,人人影视字幕站发布微博称,...
细腻的解释及造句 细腻的解释及造句  细腻拼音  【注音】: xi ni  细腻解释  【意思】:(1)精细光滑。(2...
夙夜匪懈造句   夙夜匪懈造句  1、他为了参加此次考试,半年来夙夜匪懈,拚命苦读,如今终于如愿以偿,人人称羡。 ...