Создание задержки триггера
|
|
Igorfjv | Дата: Понедельник, 12 Июня 2017, 14:58 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Доброе время суток! Извеняюсь, что криво объясняю. Игра жанра beat `em all, анимация атака кулаком. На кулаке висит капсул коллайдер, на противнике триггер.
Код на враге:
OnTriggerEnter(Collider other){ if (other.tag == "Kulak_Playera"){ GetHit(10); } }
void GetHit(int damage){ health -= damage; _animator.SetTrigger("Gethit"); }
Проблема1: Как сделать так что бы не было ложных срабатываний - коллайдеры уменьшил до минимума хоть бы хны. Проблема2: При атаке "снимает" не 10, как надо, а 20-100 ХП.
Чую что дело в том что коллайдер лишний раз заходит в зону триггера. Нужна задержка срабатывания. Посоветуйте что делать, пожалуйста. Заранее благодарен.
|
|
| |
TLT | Дата: Вторник, 13 Июня 2017, 16:44 | Сообщение # 2 |
Сейчас нет на сайте
| Основы программирования. Нужно значительно усложнить механизм, в том числе и срабатывание коллизий. Слишком много ожидаете от такого простого кода.
Дао, выраженное словами, не есть истинное Дао.
|
|
| |
Igorfjv | Дата: Вторник, 13 Июня 2017, 21:34 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Решил. Помогли:) Пока так. Булева переменная в одиночку не справилась. Late и FixedUpdate не помогли. Решил через курутины.
OnTriggerEnter(Collider other){ if (other.tag == "Kulak_Playera" && !isHit){ isHit = true; GetHit(10); } }
void GetHit(int damage){ health -= damage; _animator.SetTrigger("Gethit"); StartCourutine(Sbros()); }
IEnumerator Sbros(){ yield return new WaitForSecondsRealtime(2f); isHit = false; }
Сообщение отредактировал Igorfjv - Среда, 14 Июня 2017, 12:48 |
|
| |