如何在目标丢失时重置动画序列
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 可能不是最好和最快的方法,它只是作为一个例子。请记住始终尝试根据项目要求优化代码。
我正在使用 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 可能不是最好和最快的方法,它只是作为一个例子。请记住始终尝试根据项目要求优化代码。