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

Как при нескольких нажатиях на клавишу вызвать анимацию?

29.01.2022, 23:46. Показов 1201. Ответов 20

Студворк — интернет-сервис помощи студентам
Столкнулся с такой проблемой, есть диалог, когда нажимаем на определенную клавишу он проигрывается и все хорошо, но… Подскажите пожалуйста, как реализовать анимацию при нескольких нажатий на клавишу? Например, если нажимаем 4 раза на пробел, нам выводит буловое значение true.


Вот код самого Диалога


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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class DialogSystem : MonoBehaviour
{
    [Header("ABC")]
    public Text textLabel;
    public Image faceImage;
 
    [Header("cuca")]
    public TextAsset textFile;
    public int index;
    public float textSpeed;
 
 
    // наша переменная 
    bool DadY;
 
 
    bool textFinished;
    bool cancelTyping;
 
    List<string> textList = new List<string>();
 
 
    private void Awake()
    {
        GetTextFormFile(textFile);
        
    }
 
    private void OnEnable()
    {
        //textLabel.text = textList[index];
        //index++;
        StartCoroutine(SetTextUI());
    }
 
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && index == textList.Count)
        {
            
            gameObject.SetActive(false);
            index = 0;
            return;
            
 
        }
      
        // здесь пропускаем текст.  
 
        if (Input.GetKeyDown(KeyCode.Space))
        {
 
            if (textFinished && !cancelTyping)
            {
                StartCoroutine(SetTextUI());
            }
            else if (!textFinished && !cancelTyping)
            {
                cancelTyping = !cancelTyping;
            }
 
          
        }
 
        
 
 
    }
 
    void GetTextFormFile(TextAsset file)
    {
        
        textList.Clear();
        index = 0;
 
        var lineDate = file.text.Split('\n');
 
        foreach (var line in lineDate)
        {
            textList.Add(line);
        }
 
    }
 
    IEnumerator SetTextUI()
    {
        textFinished = false;
        textLabel.text = "";
 
 
 
 
        // for (int i = 0; i < textList[index].Length; i++)
        // {
        //     textLabel.text += textList[index][i];
        //     yield return new WaitForSeconds(textSpeed);
        //}
        int letter = 0;
        while (!cancelTyping && letter < textList[index].Length - 1)
        {
            textLabel.text += textList[index][letter];
            letter++;
            yield return new WaitForSeconds(textSpeed);
        }
        textLabel.text = textList[index];
        cancelTyping = false;
        textFinished = true;
        index++;
    }
 
    private void OnTriggerStay2D(Collider2D collision)
    {
       
        {
 
            Debug.Log("ссссссссссссссс");
 
 
 
 
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2022, 23:46
Ответы с готовыми решениями:

Как при нажатии на клавишу клавиатуры вызвать процедуру?
Помогите плз, я в Delphi только учусь, Как при нажатии на клавишу клавиатуры вызвать какую-либо процедуру?

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

Как вызвать анимацию в .xaml.cs?
Есть круг, который имеет события перемещаться по оси Х за ограниченными координатами. Если круг не доводят до конца одной из конечных...

20
 Аватар для chipenstain
68 / 57 / 16
Регистрация: 17.07.2017
Сообщений: 223
30.01.2022, 12:31
Сделай интовую переменную которая будет хранить "сколько" раз нажали кнопку. По нажатию кнопки увеличивай значение на один. Спустя какое-то время (в течении которого если кнопка не нажата снова, не считать повторным нажатием) обнуляй её

И делай проверку, если инт равен нужному значение, то ...
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
30.01.2022, 14:50  [ТС]
написал вот такой отдельный скрипт с триггером, но что-то ни так...

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Counterrrr : MonoBehaviour
{
    public int counterSpace;
 
 
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            counterSpace++;
        }
 
        
    }
 
 
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.gameObject.name == "Player" && counterSpace == 4)
        {
            Debug.Log("ссссссссссссссс");
        }
    }
}


Странно, думал с триггером что-то, но с ним все хорошо...
0
 Аватар для chipenstain
68 / 57 / 16
Регистрация: 17.07.2017
Сообщений: 223
30.01.2022, 15:14
Странно.. должно работать. Проверь дебагером значение counterSpace и проверь точно ли "name" равняется Player.
Еще может не срабатывать изза того, что слишком много раз нажал как вариант, ибо скрипт срабатывает когда пробел нажат строго 4 раза, а обнуления нет, о котором я говорил.

И еще может быть что OnTriggerStay2D вообще не отрабатывает, и код туда не заходит. Проверь сначала вот это )

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Counterrrr : MonoBehaviour
{
    private int counterSpace;
    private float timeToReset;
    private float resetTime = 0.3f;
 
 
    private void Update()
    {
        timeToReset += Time.deltaTime;
        if (timeToReset > resetTime)
        {
            timeToReset = 0f;
            counterSpace = 0;
        }
        if (Input.GetKeyDown(KeyCode.Space))
        {
            timeToReset = 0f;
            counterSpace++;
        }
    }
 
 
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.gameObject.name == "Player" && counterSpace == 4)
        {
        Debug.Log("space pressed 4 times");
        }
    }
}
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
30.01.2022, 16:23  [ТС]
Видимо всё-таки не видит эту часть...
C#
1
2
3
4
5
6
7
 private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.gameObject.name == "Player" && counterSpace == 4)
        {
        Debug.Log("space pressed 4 times");
        }
    }
потому что проверил сам счетчик в update, все работает. name правильное, ну типа гг стоит в этом триггере, мы жмём 4 раза пробел и должно выводить дебаг, но увы...
0
 Аватар для chipenstain
68 / 57 / 16
Регистрация: 17.07.2017
Сообщений: 223
30.01.2022, 17:01
snippet02, в таком случае надо смотреть почему не срабатывает тригер.

Возможные варианты (которые сейчас с ходу в голову пришли):
  1. Коллайдер на объекте со скриптом есть?
  2. RigidBody2D должен быть хотя бы на одном из двух взаимодействующих тел
  3. Проверь слои на объектах и матрицу слоев в настройках проекта, чтобы обрабатывались столкновения

Если не поможет, скинь скриншоты сцены, и инспектора объектов со скриптом, и в котором стоит объект со скриптом, буду пробовать помочь
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
30.01.2022, 17:11  [ТС]
Вот
Миниатюры
Как при нескольких нажатиях на клавишу вызвать анимацию?   Как при нескольких нажатиях на клавишу вызвать анимацию?   Как при нескольких нажатиях на клавишу вызвать анимацию?  

0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
30.01.2022, 17:23  [ТС]
При этом, если просто написать "вывести текст при нажатии на клавишу space" то все выводит, а вот счетчик нет
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
30.01.2022, 18:07
Покажи настроики ProjectSetting
Кликните здесь для просмотра всего текста
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
30.01.2022, 18:16  [ТС]
вот
Миниатюры
Как при нескольких нажатиях на клавишу вызвать анимацию?  
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
30.01.2022, 18:19
snippet02, галочки стоят? Player->BG ?
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
30.01.2022, 18:27  [ТС]
это оно?
Миниатюры
Как при нескольких нажатиях на клавишу вызвать анимацию?  
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
30.01.2022, 18:31

Там BG не хватает
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
30.01.2022, 18:46
И не обратил внимание PLAYER тоже, возможно они как то подругому назначены, должны там отображаться

Добавлено через 9 минут
А что если Default у плеиера и стола все поставить, может я ошибаюсь
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
30.01.2022, 19:12  [ТС]
не думаю, что поможет
0
 Аватар для chipenstain
68 / 57 / 16
Регистрация: 17.07.2017
Сообщений: 223
30.01.2022, 19:20
snippet02, поменяй OnTriggerStay2D на OnCollisionStay2D.
Все дело в том, что физика обрабатывается не в том направлении, в котором обрабатываете её вы.
Объясняю:

OnTriggerStay срабатывает, тогда, когда объект со скриптом вошел в триггер.
Стол у вас входит в коллайдер, а игрок триггер.
Соответственно на игрка вешается обработчик OnTrigger, а на стол OnCollision
https://docs.unity3d.com/Scrip... tay2D.html

Добавлено через 1 минуту
zhunshun, Вы немного путаете SortedLayer и Layer. Они используются для разных целей, и SortedLayer в обработке физики не участвуют
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
30.01.2022, 20:11  [ТС]
Тоже не работает...

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Counterrrr : MonoBehaviour
{
    private int counterSpace;
    private float timeToReset;
    private float resetTime = 0.3f;
 
 
    private void Update()
    {
        timeToReset += Time.deltaTime;
        if (timeToReset > resetTime)
        {
            timeToReset = 0f;
            counterSpace = 0;
        }
        if (Input.GetKeyDown(KeyCode.Space))
        {
            timeToReset = 0f;
            counterSpace++;
        }
    }
 
 
     void OnCollisionStay2D(Collision2D collision)
    {
        if (collision.gameObject.name == "Player" && counterSpace == 4)
        {
            Debug.Log("space pressed 4 times");
        }
    }
}
0
 Аватар для chipenstain
68 / 57 / 16
Регистрация: 17.07.2017
Сообщений: 223
31.01.2022, 00:10
snippet02, пропиши такой код:

C#
1
2
3
4
5
6
7
8
9
private void OnCollisionStay2D(Collision2D collision) 
{
    Debug.Log("hit collider");
} 
 
private void OnTriggerStay2D(Collider2D collision) 
{
    Debug.Log("hit trigger");
}
На сцене создай пустышки с коллайдерами, 4 штуки.
На первом: коллайдер
На втором: триггер
На третьем: коллайдер и ригидбоди
На четвёртом триггер и ригидбоди

И затестируй, в каком варианте будет столкновение зачетно. Отсюда уже можно будет отталкиваться.
(попробуй позаходить в каждый из них, и смотреть когда выведет сообщение)
0
0 / 0 / 0
Регистрация: 13.09.2020
Сообщений: 138
31.01.2022, 01:01  [ТС]
Что-то странное происходит с этим unity… Тригер как бы видит персонажа, я даже прописывал, если нажимаем на кнопку, чтобы выводило сообщение, и оно выводило! То есть с тригером все хорошо. Но когда вписываю счётчик, то вообще не реагирует на него…
0
 Аватар для chipenstain
68 / 57 / 16
Регистрация: 17.07.2017
Сообщений: 223
31.01.2022, 01:26
В таком случае ошибка не с юнити, а с вашим кодом.
Раз код заходит в обработчик, значит все работает.
Запустите код в режиме отладки, с breakpoint на месте где должен быть вывод, и посмотрите почему не срабатывает.
Что-то в вашем коде ведёт себя не так как ожидается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2022, 01:26
Помогаю со студенческими работами здесь

Как убрать звуки ошибки при нажатиях необрабатываемых клавиш?
Решил в программе (диалоговая форма) сделать некоторые хоткеи. Приделал акселераторы (LoadAccelerators, TranslateAccelerator). ...

Borland C++ Builder как при нажатиях пользователь выбирал базу данных
Можно ли как-то сделать так чтобы при нажатиях пользователь сам выбирал какую базу данных открыть если да то как и через что

Составить программу, которая при нажатии на клавишу «Y» поднимает флаг, а при нажатии на клавишу «N» опускает
Заранее спасибо))

Не могу вызвать стандартную анимацию в винде!
Подскажите как решить проблему! Дело в том, что эта процедура вполне работает на Delphi в ОС Windows XP, а для моей версии Delphi XE4 для...

Запись координат при нажатиях кнопки мыши
Есть программа, которая при нажатии кнопки мыши записывает её координаты. Что нужно добавить, чтобы записывались значения при втором и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru