Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 15.03.2022
Сообщений: 14

Условие запуска анимаций 2D

01.11.2022, 01:25. Показов 628. Ответов 8

Студворк — интернет-сервис помощи студентам
Привет форум, начал осваиваться в Unity и для начала решил создать 2D игру, написал код с условиями запуска анимаций для джойстика и клавиатуры(скриншот прикреплён), но я понимаю, что много условий в коде это почти всегда выглядит не очень корректно, да и в целом сказывается в будущем на производительности. Ну так вот, можно ли как-то упростить это всё? Искал в интернете информацию(возможно плохо), но не нашёл ничего полезного. Буду рад если мне помогут). Так же не откажусь от ссылки на какую-нибудь полезную документацию.
Вложения, ожидающие проверки
Тип файла: jpg j447koDKUUU.jpg
Тип файла: jpg nxzwo8HegSg.jpg
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.11.2022, 01:25
Ответы с готовыми решениями:

Условие запуска определённым макросом
Всем привет. У меня есть два макроса. Один - запускает сценарий в книге, другой - запускает запускает первый из другой книги. ...

Метод простых итераций. Показать, что условие сходимости в методе выполнено на всех отрезках до запуска программы
Добрый вечер, задача уточнить корни уравнения методом простых итераций, нужно показать, что условие сходимости в итерационном методе...

Запрос вида (условие И условие) ИЛИ (условие И условие)
Товарищи, не очень силен в MySQL, поэтому прошу помощи. Допустим, есть таблица данных с четырьмя столбцами: задача, статус, согласователь1,...

8
гуглю вместо тебя
 Аватар для raygman
240 / 157 / 88
Регистрация: 20.05.2021
Сообщений: 436
01.11.2022, 17:23
код картинками нельзя
0
1 / 1 / 0
Регистрация: 15.03.2022
Сообщений: 14
05.11.2022, 23:08  [ТС]
Тот самый код со скриншотов.
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 private void MovePC()
    {
        if (Input.GetKey(KeyCode.W))
        {
            animator.SetBool("UpMove", true);
        }
        else
        {
            animator.SetBool("UpMove", false);
        }
 
        if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.A))
        {
            animator.SetBool("LRMove", true);
        }
        else
        {
            animator.SetBool("LRMove", false);
        }
 
 
        if ((Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.S)) || (Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.S)))
        {
            animator.SetBool("DownLRMove", true);
        }
        else
        {
            animator.SetBool("DownLRMove", false);
        }
 
 
        if ((Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.W)) || (Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.W)))
        {
            animator.SetBool("UpLRMove", true);
        }
        else
        {
            animator.SetBool("UpLRMove", false);
        }
    }
 
    private void MoveAndroid()
    {
        if (moveInput.y > 0.1)
        {
            animator.SetBool("UpMove", true);
        }
        else
        {
            animator.SetBool("UpMove", false);
        }
 
        if (moveInput.x > 0.1 || moveInput.x < -0.1)
        {
            animator.SetBool("LRMove", true);
        }
        else
        {
            animator.SetBool("LRMove", false);
        }
 
 
        if ((moveInput.x < -0.1 && moveInput.y < -0.1) || (moveInput.x > 0.1 && moveInput.y < -0.1))
        {
            animator.SetBool("DownLRMove", true);
        }
        else
        {
            animator.SetBool("DownLRMove", false);
        }
 
 
        if ((moveInput.x > 0.1 && moveInput.y > 0.1) || (moveInput.x < -0.1 && moveInput.y > 0.1))
        {
            animator.SetBool("UpLRMove", true);
        }
        else
        {
            animator.SetBool("UpLRMove", false);
        }
    }
0
 Аватар для Uzist
209 / 143 / 68
Регистрация: 09.05.2020
Сообщений: 747
05.11.2022, 23:30
Вряд ли подскажу что-то стоящее, но можно визуально сократить код убрав скобки после if/else.Также думаю, что можно воспользоваться тернарным оператором
1
1 / 1 / 0
Регистрация: 15.03.2022
Сообщений: 14
06.11.2022, 00:10  [ТС]
Спасибо, раньше не использовал тернарный оператор, в качестве визуального сокращения думаю будет смотреться хорошо.
0
1144 / 309 / 159
Регистрация: 30.07.2022
Сообщений: 1,784
Записей в блоге: 4
06.11.2022, 05:27
doramahoy, Доброго времени!
справка от микромягких =) по тернарному оператору
Оператор ?: (справочник по C#)

а вообще я бы посоветовал изменить подход и использовать Input систему.

например движение влево вправо при помощи Input будет описываться так

C#
1
2
float horizontal = Input.GetAxis("Horizontal");
transform.position = new Vector3(horizontal,0,0);
причем и для джойстика и для клавиатуры.

Добавлено через 3 минуты
вот как при помощи Input можно двигать персонажа
0
566 / 363 / 208
Регистрация: 18.10.2019
Сообщений: 1,231
06.11.2022, 15:03
Лучший ответ Сообщение было отмечено doramahoy как решение

Решение

doramahoy,
C#
1
2
3
4
animator.SetBool("UpMove", Input.GetKey(KeyCode.W));
animator.SetBool("LRMove", (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.A)));
animator.SetBool("DownLRMove", ((Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.S)) || (Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.S))));
//и т.д.
По аналогии вместо второго параметра вписываешь условие.
0
1 / 1 / 0
Регистрация: 15.03.2022
Сообщений: 14
06.11.2022, 15:26  [ТС]
devillived, спасибо за справку по тернарному оператору, а что касается
Цитата Сообщение от devillived Посмотреть сообщение
а вообще я бы посоветовал изменить подход и использовать Input систему.
именно её я и использую, в моём moveInput как раз и находится
C#
1
new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
0
1144 / 309 / 159
Регистрация: 30.07.2022
Сообщений: 1,784
Записей в блоге: 4
06.11.2022, 15:35
doramahoy, ну так и для аниматора Input используйте тоже

C#
1
2
float horizontal = Input.GetAxis("Horizontal");
animator.SetBool("LRMove", horizontal != 0);
вместо

Цитата Сообщение от doramahoy Посмотреть сообщение
if (moveInput.x > 0.1 || moveInput.x < -0.1)
        {
            animator.SetBool("LRMove", true);
        }
        else
        {
            animator.SetBool("LRMove", false);
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.11.2022, 15:35
Помогаю со студенческими работами здесь

Рисование анимаций
Хочу написать программу наподобие такой https://multator.ru/draw/, только через Delphi, но не знаю как сделать кадровые слоты.

Цепочка анимаций
Приветствую! Вопрос вроде простой, но не видел &quot;интересных&quot; решений. Нужно построить цепочку анимаций - блок DIV должен первые 500мс...

Несколько анимаций одновременно
нужно реализовать несколько действий одновременно в паскаль абс нет, как это можно сделать? у меня качающиеся маятники, все данные о...

Смена анимаций из скрипта
Привет! Я новичок в програмировании, поэтому сильно не смейтесь и не плачьте... Вкратце опишу проблему. Я создал скрипт управления...

Исходники готовых анимаций
доброго времени суток где можно найти исходники готовый анимаций для android эклипс


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru