Как сбросить последовательность анимаций при потере цели - PullRequest
0 голосов
/ 19 октября 2018

Я использую Unity и Vuforia и хотел бы сделать анимацию на объекте AR, которая запускается при обнаружении цели и сбрасывается при потере цели, чтобы при повторном обнаружении цели анимация начиналась с начала.

Чтобы анимация запускалась только после того, как цель была найдена, я выбрал опцию «Отбор полностью» в свойстве «Режим обрезки» компонента аниматора.Но мне не удается сбросить анимацию, когда цель потеряна!Я попытался изменить скрипт DefaultTrackableEventHandler (методы OnTrackingFound и OnTrackingLost), но он не работает.

Пока я пробовал:

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

и некоторые варианты (имя анимации какпараметр метода Stop, компонент аниматора вместо компонента анимации, ...).

Кто-нибудь знает, как это сделать?

Спасибо за внимание:)

1 Ответ

0 голосов
/ 19 октября 2018

Я знаю способ сделать то, что вы хотите, более простым способом.Ищите 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 MyAnimator = GetComponent<Animator>();

И где-нибудь, в зависимости от ваших условий в игре, вы можете сделать это:

MyAnimator.Play("Attack");

Если эта анимация не имеетпереход, это будет ваше решение сделать это анимацией цикла (она будет повторяться, когда закончится), или она останется в позиции последнего кадра анимации.

При некоторых условиях, которые вы можете захотеть иметь, напримертот, что в вашем вопросе, вы могли бы сделать что-то вроде этого.

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

Предупреждение: этот Vector3.Distance не может быть лучшим и быстрым способом сделать это, это просто в качестве примера.Не забывайте всегда стараться оптимизировать свой код в соответствии с требованиями вашего проекта.

...