Не работает анимация в Unity

160
27 ноября 2018, 00:20

Работая с Unity, столкнулся с проблемой - не могу никак создать анимацию персонажа и привязать её к кнопкам. В чём суть проблемы - Я создал четырёх кадровые клипы для движения персонажа во все стороны? создавал из четырёх картинок в стандартном "Animation". Теперь хочу привязать клипы к кнопкам.

Код:

public class Anim : MonoBehaviour {
    Animator _anim;
    void Start() {
        _anim = GetComponent<Animator>();
    }
    void Update() {
        if(Input.GetKey(Keycode.A)){
            _anim.SetInteger("State", 3);
        }
        else {
            _anim.SetInteger("State", 5);
        }
        if(Input.GetKey(Keycode.D)){
            _anim.SetInteger("State", 4);
        }
        else {
            _anim.SetInteger("State", 5);
        }
        if(Input.GetKey(Keycode.W)){
            _anim.SetInteger("State", 1);
        }
        else {
            _anim.SetInteger("State", 5);
        }
        if(Input.GetKey(Keycode.S)){
            _anim.SetInteger("State", 2);
        }
        else {
            _anim.SetInteger("State", 5);
        }
    }
}

Answer 1

Вся проблема в том, что каждый следующий if-else поменяет значение свойства "State" в конечном автомате аниматора.

Решение простое - нужно сделать общий else, который будет отрабатывать, если никакая клавиша не нажата. Более того, поскольку в каждый отдельный момент времени автомат имеет только одно состояние, если смысл связать все if'ы с помощью if-else if'ов.

Верный код со всеми правками:

public class Anim : MonoBehaviour {
    Animator _anim;
    void Start() {
        _anim = GetComponent<Animator>();
    }
    void Update() {
        if(Input.GetKey(Keycode.A)){
            _anim.SetInteger("State", 3);
        }
        else if(Input.GetKey(Keycode.D)){
            _anim.SetInteger("State", 4);
        }
        else if(Input.GetKey(Keycode.W)){
            _anim.SetInteger("State", 1);
        }
        else if(Input.GetKey(Keycode.S)){
            _anim.SetInteger("State", 2);
        }
        else {
            _anim.SetInteger("State", 5);
        }
    }
}

Ситуация с отдельными if'ами будет работать, но такой подход сохранит вам пару проверок условий :)

READ ALSO
Вопросы по WPF MVVM

Вопросы по WPF MVVM

Во время освоения паттерна столкнулся с несколькими проблемами, которые опишу в данном вопросеВ своей программе из сторонних библиотек...

166
yii2 как создать группы пользователей?

yii2 как создать группы пользователей?

Ситуация такая, нужно сделать так!

146
Получить данные из объекта

Получить данные из объекта

В Laravel, через $text = DB::table('articles')->select('text')->get(); получил переменную с результатом ` Object (

127
YII2 Валидаторы

YII2 Валидаторы

Не могу понять как работают валидаторы в YII, вот мне приходит пост запрос в контроллер:

233