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

Запуск анимации и смена персонажа по триггеру

05.11.2022, 22:56. Показов 1882. Ответов 4

Студворк — интернет-сервис помощи студентам
Привет, сижу второй день ломаю голову и пробую разные варианты, но ничего не выходит. Перейду к сути, мне нужно, чтобы при входе в триггер, появлялась картинка, выполнялась анимация и после чего происходила смена персонажа. С картинкой довольно быстро разобрался и всё работает отлично, а вот с другими двумя действиями возникает проблема. У меня есть отдельный скрипт для триггера в котором уже можно менять персонажа в триггере или же запускать анимацию, но объединить это всё в один триггер не получается, либо анимация не проигрывается т.к. сразу идёт замена персонажа, либо наоборот, проигрывается одна анимация. Единственный раз у меня что-то нужное получилось, когда я сделал 2 триггера для каждого персонажа, в одном был триггер смены персонажа, а в другом запуск анимации, но выполняется это не всегда корректно, подскажите пожалуйста, как же мне всё таки это реализовать грамотно. Также прикреплю тот самый скрипт, чтобы было легче сориентироваться.
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
public class AnimSwap : MonoBehaviour
{
    public GameObject char1, char2;
    Animator animator;
    public GameObject Button;
    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
        Button.SetActive(false);
    }
 
    // Update is called once per frame
    void Update()
    {
        
    }
    public void Anim()
    {
        if ( Input.GetKey(KeyCode.F))
        {
            animator.Play("SkeletAnim");
            char1.SetActive(false);
            char2.SetActive(true);
        }
    }
 
    private void OnTriggerStay2D(Collider2D col)
    {
        if (col.gameObject.name == "TriggerAnim")
        {
            Button.SetActive(true);
            Anim();
        }
  
    }
    private void OnTriggerExit2D(Collider2D other)
    {
            Button.SetActive(false);
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.11.2022, 22:56
Ответы с готовыми решениями:

Смена цвета DrawingBrush по триггеру
Всем привет! Подскажите кто знает, как можно изменить цвет рисунка на кнопке по триггеру. Проблема в следующем - пытаюсь создать стиль...

Остановить персонажа во время анимации
Происходит атака с помощью if(Input.GetMouseButtonDown(0)) но во время анимации он может двигаться, как его остановить до конца анимации? ...

Перемещение персонажа по средствам анимации
Доброго времени суток. Создал персонажа и анимацию с помощью mixamo. Как настроить анимацию так чтобы например при ходьбе персонаж менял...

4
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
05.11.2022, 23:12
Лучший ответ Сообщение было отмечено doramahoy как решение

Решение

Попробуйте вариант с bool переменной, которая будет означать - находится ли объект в зоне триггера.
В Update проверять эту переменную и "ловить" клавишу для смены скина.
Так же использовать Input.GetKeyDown, который сработает один раз только при нажатии, в отличии от Input.GetKey, который срабатывает постоянно при зажатии клавиши.

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
public class AnimSwap : MonoBehaviour
{
    public GameObject char1, char2;
    Animator animator;
    public GameObject Button;
 
    private bool _inTrigger; // <--------------------------
    void Start()
    {
        animator = GetComponent<Animator>();
        Button.SetActive(false);
    }
 
    void Update()  // <--------------------------
    {
        if (_inTrigger)
        {
            Anim();
        }
    }
    public void Anim()
    {
        if (Input.GetKeyDown(KeyCode.F))  // <--------------------------
        {
            animator.Play("SkeletAnim");
            char1.SetActive(false);
            char2.SetActive(true);
        }
    }
 
    private void OnTriggerEnter2D(Collider2D col)  // <--------------------------
    {
        if (col.gameObject.name == "TriggerAnim")
        {
            _inTrigger = true;
            Button.SetActive(true);
        }
 
    }
    private void OnTriggerExit2D(Collider2D other)
    {
        if (col.gameObject.name == "TriggerAnim")  // <--------------------------
        {
            _inTrigger = false;
            Button.SetActive(false);
        }
    }
}
1
1 / 1 / 0
Регистрация: 15.03.2022
Сообщений: 14
06.11.2022, 00:04  [ТС]
Спасибо за предоставленный вами код, он помог решить мне другую проблему, но основой вопрос и проблема осталась. При нажатии клавиши F происходит лишь смена персонажа. Допустим с кодом всё в порядке. Этот скрипт я добавил на своего первого персонажа и соответственно в аниматоре подключил к нему эту анимацию. По условию должна запуститься анимация из аниматора первого персонажа и после переключиться на другого персонажа. Но я не понимаю почему она пропускается.
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
06.11.2022, 10:46
Цитата Сообщение от doramahoy Посмотреть сообщение
По условию должна запуститься анимация из аниматора первого персонажа и после переключиться на другого персонажа. Но я не понимаю почему она пропускается.
Ваш код
C#
1
2
3
4
5
6
if (Input.GetKeyDown(KeyCode.F)) 
{
    animator.Play("SkeletAnim"); // запустили анимацию
    char1.SetActive(false); // но сразу выключили объект с этой анимацией
    char2.SetActive(true);
}
Вы ведь сами запускаете анимацию и тут же выключаете персонажа, и конечно его анимация выключается вместе с ним.
0
1 / 1 / 0
Регистрация: 15.03.2022
Сообщений: 14
06.11.2022, 18:14  [ТС]
А есть ли какой-то способ обратиться к другому animator controller через скрипт(В данном случае к animator controller второго персонажа)? Или же проверить состояние анимации, активна она или нет. Я так понимаю нужно в условии нажатия клавиши F написать ещё одно условие которое будет проверять состояние анимации или же персонажа.

Добавлено через 4 часа 7 минут
Если простыми словами, то мне необходимо запустить анимацию и после её окончания переключиться на 2го персонажа

Добавлено через 53 минуты
Добавил Animation Event в последний кадр этой анимации c методом
C#
1
2
3
4
5
6
public void Swap()
    {
            char1.SetActive(false);
            char2.SetActive(true);
        
    }
Переход после анимации стал работать, но снова появляется какая-нибудь проблема. В этот раз переход ко 2му персонажу работает только со второго и последующих взаимодействий с триггером. Во время первого взаимодействия просто запускается анимация, а после идёт переход к Entry анимации 1го персонажа.

Добавлено через 15 минут
ПРОБЛЕМА РЕШЕНА: конфликтовали два скрипта, сейчас всё работает как и планировал.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.11.2022, 18:14
Помогаю со студенческими работами здесь

Как сделать анимации движения персонажа в 2D?
Здравствуйте, я полный новичок в Unity, и хочу сделать свою игру в 2D. Я уже сделал движение персонажа с помощью клика мыши в нужную точку...

FPS Анимации для персонажа и оружия
Всем привет, очень долго меня мучает вопрос: Как правильно разделить оружие и персонажа, что бы один персонаж мог брать разные Ганы, у...

Вызов анимации персонажа из внешнего объекта
Приветствую вас всех, друзья! Буду безмерно признателен, если кто-нибудь поможет решить возникшую трудность при разработке игрушки на...

Как сделать смешивание анимации при поворте персонажа
Уже третий день пытаюсь сделать плавное изменение анимации при повороте всего персонажа, пока получается только 7Ff73_mR5zU За...

2D C# , Смена персонажа
Можете помочь, проблема в том что, сколько не искал в интернете не нашёл, Игра 2D У меня есть два персонажа и две сцены (Меню, главная...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru