Обновить

Комментарии 11

расскажу про свой кейс проектирования и реализации механики разговора NPC

и где это в статье? вся статья про то, как NPC друг друга находят на карте и ничего про диалоги. Что спрашивают, что отвечают и зачем им вообще общаться.

В экономических симуляторах и симуляторах колоний диалог - это не основная механика, и в нем нет "реплик" по типу как в Skyrim или The Sims, потому что NPC слишком много. Механика общения в экономических симуляторах и симуляторах колоний реализуется по-другому.
Мне казалось, что в разделе с заголовком "Кейс" и "Концепт решения" я обозначил ключевые аспекты, часть из которых затем раскрыл детальнее.
В любом случае, спасибо вам за обратную связь. Можете ещё оставить комментарий как раз как ответ на моё предложение
Ради эксперимента попробуйте представить себе эту механику и прикиньте оценки трудозатрат: за сколько вы бы её реализовали, а также примерный концепт решения
Мне интересно узнать ваш концепт, как вы представляете эту механику

Мне казалось, что в разделе с заголовком "Кейс" и "Концепт решения" я обозначил ключевые аспекты

ок, смотрим, что там написано:

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

А в основной части про "поговорили" ни слова. Мне казалось, что под "механикой разговора" понимают в первую очередь как сочетать фразы. Как NPC1 отвечает на фразу NPC2, чтобы они выглядили более-менее естественно. Допускаю, что вашему проекту это не нужно.

Что касается меня, то я бы хотел создать диалоговую механику связанную с остальной деятельностью NPC и это очень сложная тема. Пока я не готов дать какую-то оценку трудозатрат.

ой нет, я бы умер такое делать. Это примерно такой базовый функционал как у меня + еще осмысленные диалоги с полноценными репликами. В массовых симуляторах конкретные текстовки не важны, в них диалог - это скорее способ изменить силу социальной связи между NPC (условно Core-модуль генерирует событие старта/завершения "реплики", а на стороне игры изменяется, например, в положительную или отрицательную сторону связь между этими NPC и, например, создаются или скрываются баблы (пузыри над головой)). В кач-ве примера можно посмотреть на RimWorld тот же. Там вроде как есть механика разговора между NPC, но она не основная и проходит в фоне.
То, о чем вы говорите имеет смысл не в экономических симуляторах или симуляторах колоний, где куча безликих NPC, а где есть управляемые "герои" и диалог - это одна из основных механик. Типа как в HeavyRain или Detroit Become Human - там от них ещё сюжетные развилки разные. Вот в этом случае да, надо делать осмысленные реплики.

А когда как такового сюжета нет и "беседа" проходит просто в фоне - это оверкилл. Но и даже в этом случае это реализуется не так просто.

Короче просто кейс не тот, но я понял, что я не попал в ваши ожидания. (мне до этого еще как до Луны)

кликнули на нпц, если он в пределах экрана или на расстоянии или видимый, алгоритм А* подводит игрока к нпц, дальше диалог, механика - так понял(есть 3д где такое реализовано, есть где даже камера по высоте курсирует относительно взгляда, есть и без этого конечно)

Спасибо за статью, было интересно узнать, как оно там под капотом. Однако не проще было ли отказаться от перемещения по координатам и перейти на более жизненную модель- перемещение к объекту? Каждый объект имеет своё местоположение(условные координаты) - функция перемещения получает ссылку на объект вместо координат. Как и в реальном мире вы же хотите не по координатам, а от предмета к предмету

вот тоже интересно почему было выбрано перемещение по координатам, а не к объекту?

а что такое перемещение к объекту? Под капотом так или иначе все равно вычисляются координаты и объект двигается от одной точки с координатами x1, y1 до другой точки с координатами x2, y2.
Разница только в том, что координаты x2, y2 не постоянные.
NavMesh со своим SetDestination здесь не подойдет, тк у меня в целевой модели массовая симуляция, я протестировал ее на +- 1000 агентах и это треш даже без перемещения. Просто тупая анимация 1000 NPC в кадре уже сбивает FPS до 15 на моем Lenovo Legion 5pro. Так что как-то так. А если хочется оптимизировать - то это только что-то самописное и, обычно, на основе А*.

Но, если у вас простой кейс с несколькими NPC в кадре, - тогда то, что я пишу в своих статьях про экономический симулятор - это действительно будет оверхед.


Но я, конечно, не претендую на то, что я тут самый умный. Я писать код начал в начале 2024го, так что может действительно есть какой-то другой и простой путь.

У вас явно какая-то ошибка в логике:

  • создавать каждый раз объект ради подсчета расстояния до другого объекта - как-то расточительно, учитывая, что расстояние между 2 точками - одна формула

  • у вас объекты размещаются в дискретных координат или в произвольном месте? Если первое, то почему не посмотреть соседние ячейки, если второе, то формула расстояния неправильная

Все может быть, но результат в точности такой, какой я ожидаю
Объекты располагаются в дискретных ячейках

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации