如何在目标丢失时重置动画序列

How to reset sequence of animations when target is lost

我正在使用 Unity 和 Vuforia,我想在 AR 对象上制作一个动画,该动画在找到目标时开始,并在目标丢失时重置,以便再次找到目标时动画从头开始。

为了使动画仅在找到目标后开始,我在动画组件的剔除模式 属性 中选择了选项 "Cull Completely"。但是当目标丢失时我无法重置动画!我已经尝试修改 DefaultTrackableEventHandler 脚本(OnTrackingFound 和 OnTrackingLost 方法)但它不起作用。

到目前为止我已经试过了:

Animation[] animationComponents = GetComponentsInChildren<Animation>();
foreach (Animation component in animationComponents)
{
    component.Stop();
}

和一些变体(动画名称作为 Stop 方法的参数,动画组件而不是动画组件,...)。

有人知道怎么做吗?

感谢您的关注:)

我知道一种以更简单的方式完成您想要的操作的方法。寻找 https://docs.unity3d.com/Manual/class-State.html

您将获得相同的结果,但使用动画状态的方式不同。

然后去找动画师window

你可以构建类似的东西。这些是状态之间的转换,与动画相关联。

这个也看看https://docs.unity3d.com/Manual/class-Transition.html

所以在您的脚本中,您可以通过以下方式访问 Animator:

Animator MyAnimator = GetComponent<Animator>();

并且在游戏中超过你条件的地方,你可以这样做:

MyAnimator.Play("Attack");

如果该动画没有过渡,您可以决定将其设为循环动画(结束时会重复),或者它会停留在动画最后一帧的位置。

根据您可能想要的某些条件,例如您问题中的条件,您可以这样做。

if (Vector3.Distance(this.transform.position, myTarget.transform.position) >= 2f) {
  MyAnimator.Play("Idle");
}

警告:Vector3.Distance 可能不是最好和最快的方法,它只是作为一个例子。请记住始终尝试根据项目要求优化代码。