失去目标时如何重设动画序列

时间:2018-10-19 09:05:35

标签: c# unity3d vuforia

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

为了使动画仅在找到目标后才开始,我在动画器组件的“消隐模式”属性中选择了“完全消隐”选项。但是当目标丢失时,我无法重设动画!我曾尝试修改DefaultTrackableEventHandler脚本(OnTrackingFound和OnTrackingLost方法),但是它不起作用。

到目前为止,我已经尝试过:

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

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

有人知道该怎么做吗?

感谢您的关注:)

1 个答案:

答案 0 :(得分:1)

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

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

Animator Controller

然后转到动画器窗口

Animator Windows

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

Animations, Transitions and More

也来看看这个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可能不是最好,最快的方法,仅作为示例。请记住,始终尝试根据项目要求优化代码。