Ищу помощи с корутинами в моей игры ((:

Ребзя, кто нибудь может помочь настроить механику в игре? Сам не справляюсь уже который день. Могу оплатить консультацию.
Unity 2D - Корутины, поведение НПС
Проблему описал у себя в посте (там видео):

ЧЕ ТО КАК ТО СЛООООЖНО

ага, и так бывает! 😭

Да, знаю, я давно обещал поделиться результатами "оживления" зомби в игре. Я много говорил об этом в телеграмных сторис, но все никак не мог найти время для того чтобы отполировать эту механику до презентабельного вида.

И все же, после нескольких дней неудачных попыток, делюсь с вами сырым куском функционала 😆. Я честно старался вылизать этот код последние пять дней, но то из-за поломки машины, то из-за перегруженного мозга во время основное работы, которая съедает по 9-10 часов в день - пока что не справился.

Что же тут происходит? Вы видите зомби, у которого пока что плохо настроены анимации, нет звуков и плохо работает поведение.

А что, собственно, не так? Обратите внимание, как резко зомби меняет состояние, стоит игроку войти в зону обнаружения или выйти из нее. Я хочу сделать так, чтобы после побега игрока из зоны обнаружения зомби - последний продолжал преследование по горячим следам еще какое-то время.

А так же, если зомби "учует" игрока где над или под собой или за каким-то препятствием, то он не ринется за ним, а остановится подумать, в попытке дождаться ошибки игрока, когда тот войдет в прямую видимости зомбака.

Все эти механики требуют работы с так называемыми корутинами (пример корутины будет в комментариях). Сложная для меня часть. Я пробовал разные подходы и пока что все чего добился - офигенно красивый, но не полностью работающий код 😆 (ой, а давайте я код вам тоже пошарю, а вдруг тут кто то умный сможет помочь?).

Полный код скрипта доступен тут ПОМОГАЙТЕ! 😆

44
21 комментарий

https://youtu.be/OzCI06es5QQ?si=Eg30j0mFBrIDgGcX
Держи, всё подробно и наглядно.
И на будущее, имей уважение к времени других, описывай проблемы в посте, никто не пойдёт в твою телегу.

5

Спасибо! Я смотрел уже тонну видео и это в том числе. Пытался через ChatGPT, привлекал знакомого фронтендера. Не могу разобраться все равно. Справлялся бы сам - не обращался бы за платной помощью...

Ну не нагнетай. В посте и код и видео и описание проблемы. А какое время я трачу? 1 тап пальцем или 1 щелчок мышкой и оп - открыта статья в телеге где все подробно изложено.

Не нужны корутины тебе, юный падаван.

Нужны несколько маркеров цели.

То есть:
- есть состояние (текущее)
- есть цель этого состояния
соответственно можно миксовать несколько разных состояний, потом смешивая их.
При этом целей может быть несколько и в какой-то момет вес "сбегать за хилкой" может стать важнее, чем "отоварить игрока".

А можно и в духе Disco Elysium:
- ЗРЕНИЕ: "вижу объект, игрок.
- ТЕЛО: Мы, вообще-то, лежим.
- ДЕЙСТВИЕ ПОВОРОТА НАЛЕВО: мне это не нравится.
- ДЕЙСТВИЕ ПОВОРОТА НАПРАВО: мне пофигу, мы лежим!
- ДЕЙСТВИЕ НАСТУПЛЕНИЯ: мне это нравится! Я бы достиг а 30 секунд, но мы лежим!
- ДЕЙСТВИЕ ПОЛЩАНИЯ: мне это нравится! Я это достигну на минуту!
- ДЕЙСТВИЕ ВСТАВАНИЯ: мне это нравится! Я встану за 10 секунд!
- ТЕЛО: едрить вы активные.
- КОНТРОЛЛЕР: ползти на 10+30+60-60/10+30+60! Вставать на 10+30+60-10/10+30+60!

Зомби: *встаёт в сторону игрока*

3

xD коммент - шедевр. Идею понял, ухожу крутиться со всем этим...

Не можешь с корутинами - сделай без них. Ведь всё равно ты наверняка пытаешься проэмалировать на корутинах какой-нибудь конечный автомат. 🤔

2

Подскажите, пожалуйста, а как по другому? Я хочу сделать задержки перед переходом из одного состояние в другое и как то правильно потом эти паузы отменять, если состояние возобновилось

Не очень понимаю в чём цель использования именно корутин. Корутина просто создаёт отдельный поток. Да, внутри неё можно удобно делать задержку между исполнением функций, но задержку можно и через Invoke() создать, при этом используя банальный Update.

1