Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 222

Анимация в 2D срабатывает не сразу после нажатия клавиши

12.07.2015, 23:31. Показов 5423. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет,

Я только начал знакомиться с 2D анимацией в Unity. Проблема в том, что анимация срабатывает не сразу, а с спустя пол секунды после нажания (W и S). Сделал отдельный пример. Прикрепил проект.

Скрипт:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using UnityEngine;
using System.Collections;
 
public class Player : MonoBehaviour
{
    private enum PlayerState
    {
        IdleUp, IdleDown, IdleRight, IdleLeft,
        MoveUp, MoveDown, MoveRight, MoveLeft
    }
 
    private enum Direction
    {
        Up, Down, Right, Left
    }
 
    private Direction currentDirection;
 
    private Animator anim;
 
    // Use this for initialization
    void Start()
    {
        anim = GetComponent<Animator>();
 
        currentDirection = Direction.Up;
    }
 
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.W))
        {
            anim.SetInteger("state", (int)PlayerState.MoveUp);
            currentDirection = Direction.Up;
        }
        else if (Input.GetKey(KeyCode.S))
        {
            anim.SetInteger("state", (int)PlayerState.MoveDown);
            currentDirection = Direction.Down;
        }
        else
        {
            if (currentDirection == Direction.Up)
            {
                anim.SetInteger("state", (int)PlayerState.IdleUp);
            }
            else if (currentDirection == Direction.Down)
            {
                anim.SetInteger("state", (int)PlayerState.IdleDown);
            }
        }
    }
}
Вложения
Тип файла: zip Tanks.zip (548.2 Кб, 3 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.07.2015, 23:31
Ответы с готовыми решениями:

После нажатия клавиши Enter или нажатия на Button
Помогите пожалуйста.:-[ Задача: После нажатия клавиши Enter или нажатия на Button поле курсора переходит в соответствующий компонент...

Компьютер включается сразу от сети, без нажатия клавиши.
Такая ситуация - как-то лазил в системник (в частности в блок питания), почистил, собрал. Включаю комп в розетку, а он тут же запустился. И...

Событие нажатия клавиши не срабатывает, если добавить элементы на форму
Всем привет. Нужен совет в какую сторону смотреть. Есть форма. На ней нужно отлавливать нажатие клавиши. public partial class...

3
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 222
12.07.2015, 23:53  [ТС]
Получается, что если двигаться вверх и вниз (W и S), то перемещение срабатывает быстрее, поэтому танк, к примеру, начинает ехать задом.

Добавил перемещение:

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using UnityEngine;
using System.Collections;
 
public class Player : MonoBehaviour
{
    private enum PlayerState
    {
        IdleUp, IdleDown, IdleRight, IdleLeft,
        MoveUp, MoveDown, MoveRight, MoveLeft
    }
 
    private enum Direction
    {
        Up, Down, Right, Left
    }
 
    private Direction currentDirection;
 
    private float currentSpeed = 0.5f;
 
    private Animator anim;
 
    // Use this for initialization
    void Start()
    {
        anim = GetComponent<Animator>();
 
        currentDirection = Direction.Up;
    }
 
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.W))
        {
            anim.SetInteger("state", (int)PlayerState.MoveUp);
            currentDirection = Direction.Up;
            transform.Translate(Vector3.up * currentSpeed * Time.deltaTime);
        }
        else if (Input.GetKey(KeyCode.S))
        {
            anim.SetInteger("state", (int)PlayerState.MoveDown);
            currentDirection = Direction.Down;
            transform.Translate(Vector3.down * currentSpeed * Time.deltaTime);
        }
        else
        {
            if (currentDirection == Direction.Up)
            {
                anim.SetInteger("state", (int)PlayerState.IdleUp);
            }
            else if (currentDirection == Direction.Down)
            {
                anim.SetInteger("state", (int)PlayerState.IdleDown);
            }
        }
    }
}
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 222
13.07.2015, 14:50  [ТС]
Ура! Я нашёл ошибку! Нужно было в настройках установить для "Transition Duration" значение 0 (для каждого Transition). Причём, галочка HasExitTime должна быть убрана для всех Transition.

Я нашёл решение в этом туториале: Lynda - Unity 5 2D Essential Training [FULL] (Part 1)
Миниатюры
Анимация в 2D срабатывает не сразу после нажатия клавиши  
3
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,966
Записей в блоге: 222
13.07.2015, 17:05  [ТС]
Прикрепил пример движения танка из Battle City с помощью WASD (или стрелок) со звуком.

Наиболее правильно привлечь "Any State" (как на прикреплённом рисунке).

Для каждого Transition в Settings:
- галочка "Has Exit Time" должна быть убрана
- значение "Transition Duration (s)" нужно выставить в ноль
- убрать галочку "Can Transition To Self"

Добавил постоянный звук двигателя и звук газа, при нажатии кнопок WASD (или стрелок).

P.S. Если кому-то пригодилась информация (или мой прикреплённый пример), то, пожалуйста, нажимайте кнопку "Спасибо"
Миниатюры
Анимация в 2D срабатывает не сразу после нажатия клавиши  
Вложения
Тип файла: zip Tanks_v1.1.0.zip (6.09 Мб, 9 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2015, 17:05
Помогаю со студенческими работами здесь

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

Побуквенный вывод слова через цикл + ожидания нажатия клавиши (после нажатия очистка и установка курсора на )
строку) Masm32 (com -программа) вообщем столкнулся с проблемой. к примеру ввожу ' LSD49 $' выводится через цикл loop (в ECX -...

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

Действие после нажатия клавиши
Еще раз здравствуйте. Наверное плохо ищу, не могу найти ответ на вопрос. Есть форма на которую выводятся записи из таблицы, и кнопка...

Прерывание на Aтмега8 срабатывает сразу после включения
Доброго времени суток. Возникли проблемы в противне срабатывает прерывание int0 сразу после включения. Код писаный в arduino ide. Проц...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru