Показать сообщение отдельно
Старый 04.11.2014, 17:01   #131
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Faded [игра мечты]

Сообщение от Mr_F_ Посмотреть сообщение
Ну а как бы ты строил?
Конкретного ответа тут не найдешь.

Все сложно. Но "модульность" - это главное, как это применяется в твоем случае - тебе нужно знать самому.
Для например AI, должна быть какая-то абстракция, которая будет конечно зависить от других компонентов игры, но суть в том чтобы иметь как можно независимую сиситему AI.
Я бы делал графовый AI, но он не детерминистичный, тем самым его для дебажинга его, нужно иметь туулсет для контроля данных в графах.
Но по сути у npc есть "приоритеты" они могут исходить из окружения и других "перков", и далее есть метод эвалюации этих приоритетов.
"Задание" - это перк, должны быть условия того как оно выполняется, и возможны последствия - присваивает новые перки персонажу. Каждый перк должен иметь свой метод эвалюации исходя из разных факторов.
Все перки "конкурируют" в таблице приоритетов, чтобы npc знал что важнее.
Например если убить NPC - это создает информацию, которая может попасть в "руки" другим NPC, если этому NPC был важен убитый, то эти два фактора могут привезти к последствиям: повлиять на характеристики, такие как отношение к убийце, а также создать перк "месть". У этого перка есть метод эвалюации, который может выдать разную степень приоритета, например, если цель близко и у мстителя есть оружие а также степень отношения к цели весьма негативна - то выше приоритет перка. Тут нужен баланс, например если отношение ужасно негативное, но у мстителя нету оружия, но цель близко - это может все равно быть весьма высоким в приоритетах чтобы совершить отомщение. Тут баланс.
Также если цель мертва, или отношение исправить, то естественно месть - становится менее вероятной. Или если npc труслив и нету оружия, то это сильно влияет на приоритет данного перка. Приоритет должен быть в радиусе 0..1. Где 1.0 - идеальные условия.
Это весьма схоже с мелкой нейро-сетью где разные факторы влияют на приоритет - эвалюация. По факту я делал мелкие нейро-сети, с мелким сэмплом данных, тупо основанных на моих убеждениях, и любопытно, но натренеровать мелкую сеть выдавать приоритет из примерно 4 факторов - результат был весьма успешный.

Это по поводу "мотивации", и принятия решений.
По поводу конкретных действий тут другое, ты можешь использовать behaviour trees, или другие методы, например также графовую систему, с поиском кратчайшего пути к достижению цели. Но тебе нужно построить убедительную систему графов с достаточными данными чтобы осуществлять поиск по такому графу.
Найденный путь - вот тебе и этапы реализации заданной цели.

Например для отомщения, у тебя должен быть такой путь:
(найти орудие) > (подойти к цели) > (атаковать) > (цель мертва)
Если орудие есть, или не требуется, то двигаемся далее, если у цели, то атакуем, если цель мертва - цепочка закончена.

Тут не все просто, т.к. есть условия, и они весьма отличаются, есть условия влияющие на перемещение между node'ами у графа.

Проще имхо будет использовать Behaviour Trees для каждого перка, у тебя будет весьма контролируемый сценарий.



Пару сложностей:
1. как сделать параллельность в целях. В behaviour trees, как бы все "ручками" определено. И не представляю возможность запуска паралельно нескольких деревьев. Для системы графов, тут сложно, т.к. нужно строить path по графам динамически, и приоритеты уже будут не по перкам, а во время постройки всего пути, применятся должны разные модификаторы. Также node'ы в графах могут приводить к ответвлениям. Например "найти оружие", может привезти к созданию нового перка, где метод приобритения оружия может быть разным, например украсть, либо убить чтобы получить, либо купить, и тут снова, все зависит от модификаторов и характеристик самого npc. Я думал над системой эвалюации во время создания пути по графу, где каждое ответвление должно проходить взвешивание, и далее самый "легкий" путь - в приоритете.
2. Смена целей, тут можно попасть в неприятные ситуации когда цели меняются весьма быстро, решается имхо разными методами, например все приоритеты могут меняться "плавно" в зависимости от степени "важности".

Мысли вслух.
(Offline)
 
Ответить с цитированием