При анимации двумерного объекта «Transform.Translate ()» перестает работать - PullRequest
0 голосов
/ 18 июня 2019

Я разрабатываю вражеский ИИ в 2D-игре, над которой я работаю. Этот враг плавает, и я хотел сделать анимацию «плавающего эффекта» для врага, поэтому я сделал анимацию, когда ось Y игрового объекта подпрыгивает вверх и вниз.

enter image description here

Я использую transform.Translate(), чтобы перемещать врагов в игре, и это работало очень хорошо, пока я не сделал эту анимацию. Но когда воспроизводится анимация, противник не может двигаться ни в каком направлении.

public virtual void Move(float speed)
{
    if (canMove)
    {
        transform.Translate(new Vector2(speed, 0) * Time.deltaTime);
    }
}

1 Ответ

1 голос
/ 19 июня 2019

Как только у вас есть ключевой кадр в любом состоянии вашего аниматора для определенного свойства, аниматор всегда отменяет любые изменения, сделанные в скрипте, потому что все обновления анимации выполняются после Update.Вы можете попытаться либо переместить свой код на LateUpdate.

, либо в вашем конкретном случае вы вообще не хотите, чтобы компонент x вашего положения имел ключевой кадр.Просто удалите все ключевые кадры для xz) компонента (-ов) позиции из анимации, чтобы только y имел ключевые кадры.Это должно решить вашу проблему.


В качестве альтернативы используйте ваш сценарий перемещения в GameObject на более высоком уровне в иерархии в качестве вашего Animator - то есть добавьте новый GameObject, сделайте анимированный объект дочерним по отношению к немуи вместо этого поместите сценарий движения в этот парантный объект.

...