【问题标题】:How to reset sequence of animations when target is lost如何在目标丢失时重置动画序列
【发布时间】:2018-10-19 20:50:02
【问题描述】:

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

为了让动画只在找到目标后开始,我在动画组件的 Culling Mode 属性中选择了“Cull Completely”选项。但是当目标丢失时我无法重置动画!我曾尝试修改 DefaultTrackableEventHandler 脚本(OnTrackingFound 和 OnTrackingLost 方法),但它不起作用。

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

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

还有一些变体(动画名称作为 Stop 方法的参数,动画组件代替动画组件,...)。

有人知道怎么做吗?

感谢您的关注:)

【问题讨论】:

    标签: c# unity3d vuforia


    【解决方案1】:

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

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

    然后转到动画窗口

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

    也看看这个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 可能不是最好和最快的方法,这只是一个例子。请记住始终尝试根据您的项目需求优化您的代码。

    【讨论】:

    • 我只是使用了 MyAnimator.Play 部分:当找到目标时,我播放序列的第一个动画。它就像我想要的那样工作,但这是正确的方法还是应该使用 Vector3.Distance() 之类的东西?非常感谢您的回答,对我帮助很大:)
    猜你喜欢
    • 2021-04-06
    • 2017-03-19
    • 2014-11-07
    • 1970-01-01
    • 2021-09-08
    • 2020-09-24
    • 2023-03-13
    • 2023-02-23
    • 2020-12-16
    相关资源
    最近更新 更多