问题描述:
最近在用spine动画时发现,有时候切换动画的时候会显示一个动画残影很影响体验 所以找了半天才找到解决方案
解决办法
在Unity的Project下找到Spine动画的SkeletonData文件,选中该文件之后在Inspector面板上找到Animationgs下面有一个"Setup Pos",这个按钮可以将骨骼(bones)、资源槽(slots)或两者重置为装配动作(setup pose)。它与调用`setBonesToSetupPose` 或 `setSlotsToSetupPose` 是一样的, SetToSetupPose是将骨骼和插槽全部重置为装配动作
直接上代码
cs
private SkeletonGraphic _skeletonGraphic;
private AnimationState _spineAnimationState;
private void Start()
{
_skeletonGraphic = GetComponent<SkeletonGraphic>();
_spineAnimationState = _skeletonGraphic!.AnimationState;
}
public void Clear(int trackIndex, string animationName, bool isLoop = false)
{
_skeletonGraphic.Skeleton.SetToSetupPose();
_spineAnimationState.SetAnimation(trackIndex, animationName, isLoop);
_skeletonGraphic.Update(0);
_skeletonGraphic.LateUpdate();
}
_skeletonGraphic.Skeleton.SetToSetupPose(); // 这个是重置骨骼和插槽为装配动作
_spineAnimationState.SetAnimation(trackIndex, animationName, isLoop); //设置一个默认动画
// 强行执行一次Update, 因为执行上述代码时,可能skeleton自身的Update已经执行完毕,这样要到下一次Update才会刷新Spine。
// 强行执行一次Update,就可以立马刷新Spine状态。
_skeletonGraphic.Update(0);
_skeletonGraphic.LateUpdate();// 强制更新一下网格
然后就可以看到不会有残影了
官方文档:https://zh.esotericsoftware.com/spine-using-runtimes/#Animation-changes