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

Как сделать Задержку между ударами

12.10.2019, 13:32. Показов 7636. Ответов 4

Студворк — интернет-сервис помощи студентам
Всем привет, вот начал изучать Unity3d и пытаюсь сделать игру, столкнулся с проблемой, необходимо сделать задержку между ударами, всего 6 ударов => 6 анимации
Как должно быть : нажатия на клавишу атаки, задержка(ну к примеру в 300 мс), смещение персонажа вперёд на 1 метр одновременно запускается анимация 1 удара, снова задержка, снова смещение на 1 метр вперёд, запускается анимация 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
42
43
44
45
46
47
48
49
50
51
52
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Attack : MonoBehaviour
{
    public Transform EndPoint;
    public GameObject Hit;
    public Animator Anim;
    private PlayerC Player;
    bool move;
    int count;
    void Start()
    {
        Anim = gameObject.GetComponent<Animator>();
        Player = gameObject.GetComponent<PlayerC>();
   
    }
 
 
    void Update()
    {
         
        if (Input.GetKeyDown(KeyCode.Space) )
        {
            
            move = true;
            Anim.SetBool("Attack1", true);
           
            StartCoroutine(Move_Attack()); 
          
        }
        if (Input.GetKeyUp(KeyCode.Space))
        {
            move = false;
            StopCoroutine(Move_Attack());
            Player.speedMove = 16;
            Anim.SetBool("Attack1", false);  
        }
    }
   
    IEnumerator Move_Attack()
    {   
     while (move == true)
        { 
            yield return new WaitForSeconds(0.3f);
            
            Player.transform.position = Vector3.MoveTowards(Player.transform.position, EndPoint.position,Time.deltaTime * 1000f);
        }        
        
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2019, 13:32
Ответы с готовыми решениями:

Как в игре сделать задержку между пропаданием хп
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Threading; public class dead_script...

Как сделать задержку части скрипта?
Как сделать чтобы часть кода запускалась примерно 5 сек. после нажатия клавиши ?

Как сделать задержку времени в скрипте?
Как сделать задержку времени? void OnMouseDown(){ obj.GetComponent&lt;PolygonCollider2D&gt; ().enabled = false; тут должна быть...

4
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,225
12.10.2019, 13:50
используй
C#
1
bool
переменную, пока анимация и удар начались, но не закончились ,пусть она будет true например. и по условию на этот флаг запускай удар. а вообще подучи язык в теории, без юнити. иначе гиблое дело это все

Добавлено через 6 минут
можно исползовать корутину. решения разные могут быть
0
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 7
12.10.2019, 14:00  [ТС]
Цитата Сообщение от Gammister Посмотреть сообщение
можно исползовать корутину. решения разные могут быть
Мне хотя бы одно
немного не понял что вы имели ввиду тут(глупый я, что поделать)
Цитата Сообщение от Gammister Посмотреть сообщение
переменную, пока анимация и удар начались, но не закончились ,пусть она будет true например. и по условию на этот флаг запускай удар. а вообще подучи язык в теории, без юнити. иначе гиблое дело это все
0
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,225
12.10.2019, 14:29
хотя у тебя и так корутина есть в скрипте. не просмотрел его полностью
и отпускание кнопки думаю вообще можно убрать. (
C#
1
2
3
4
5
6
7
if (Input.GetKeyUp(KeyCode.Space))
        {
            move = false;
            StopCoroutine(Move_Attack());
            Player.speedMove = 16;
            Anim.SetBool("Attack1", false);  
        }
)
ты не там отключаешь флаг move . попробуй делать его false внутри самой корутины,в самом конце.

Добавлено через 1 минуту
то есть когда время прошло ,и игрок переместился, тогда move = false;
1
0 / 0 / 0
Регистрация: 12.10.2019
Сообщений: 7
13.10.2019, 07:20  [ТС]
Цитата Сообщение от Gammister Посмотреть сообщение
хотя у тебя и так корутина есть в скрипте. не просмотрел его полностью
и отпускание кнопки думаю вообще можно убрать. (if (Input.GetKeyUp(KeyCode.Space))
{
move = false;
StopCoroutine(Move_Attack());
Player.speedMove = 16;
Anim.SetBool("Attack1", false);
})
ты не там отключаешь флаг move . попробуй делать его false внутри самой корутины,в самом конце.
Добавлено через 1 минуту
то есть когда время прошло ,и игрок переместился, тогда move = false;
Ну мне нужно чтобы персонаж бил и делал шаг, при зажатии на клавишу, то есть я не могу делать false, в самой корутине, так как мне нужно чтобы он постоянно бил и перемещался, а если я ставлю false внутри, то он один раз перемещается вперёд, и дальше стоит на месте и бьёт, если нажимать несколько раз клавишу удара, то он быстро перемещается рывками (хоть внутри корутины false, хоть снаружи false)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.10.2019, 07:20
Помогаю со студенческими работами здесь

Как сделать задержку между командами
У меня есть код в котором три надписи подряд. Но я хочу добавить задержку между ними как это сделать. Заранее спасибо

Как сделать в программе задержку между кликом по кнопке и выполнением определенного кода
Здравствуйте! подскажите пожалуйста как сделать чтоб при нажатии на кнопку в progressbar отсчитывалось 20сек а потом в textbox выводилось...

Как прописать задержку между треками?
Есть готовый батник: for /r D:\myz %%i in (*.mp3) do start &quot;&quot; &quot;%%i&quot;&amp;&amp;&gt;nul timeout /t 300 exit Треки переключаются все класс,но 300...

Как организовать задержку между созданием динамических кнопок?
Здравствуйте! Я новичок в C++ Прошу подсказать как можно организовать задержку 1 сек между появлением на форме динамических кнопок с 1...

Как создать задержку между переходами по страницам в WebBrowser
как заставить компонент webbrowser ждать несколько секунд перед тем как перейти на другую страницу? webBrowser1.Navigate(url1); ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru