518D5293-B9FC-4651-B2F1-D123859E7E92.jpeg310 Кб, 1767x994
Распорядок дня для НПС на c# и Unity Анон, как теоретический можно написать систему распорядка дня 895563 В конец треда | Веб
Распорядок дня для НПС на c# и Unity

Анон, как теоретический можно написать систему распорядка дня для НПС??
Чтобы как в Кенши или Скайриме, до 6:00 спать, работать до 18:00, в 20:00 в заведение
Как будет построена такая система?? Нужно, чтобы она была достаточно гибкой для того, чтобы отсуствие наприиер кровати не ломало всю систему.
Есть ли ролики на ютубе или руководства?
2 895578
>>5563 (OP)
В чем проблема? Для всего на свете туториалов нет. Берешь и делаешь. Давай конктентые вопросы.
3 895580
>>5563 (OP)
Поведение персонажей можно описывать behaviourtree.(еще стейт машиной и гоап)

Соответственно просто в зависимости от времени выюираешь другое поведение.
4 895584
>>5563 (OP)

>Как будет построена такая система??


На ецс.
5 895590
>>5580
Я изнпсально и хотел на behavior tree написать, но хватит ли ее возможностей??

Там повеление в завтсимости от массы переменных?? Вплодт до иого, что НПС можнт попасть в рабство и если уничтожить работорговцев, то он вернется домой
6 895594
>>5563 (OP)
Как обычно - несколько десятков вложенных ифов, чего тут думать? Главное - геймплей, а не архитектура.
7 895599
>>5594
Там просто около 400 НПС и каждый с распорядком.

Когда камера игрока улетает подальше от них, они не должны выполнять все логические действия ( например искать пути ), но при этом и не должны просто стоять на месте игнорируя потребности
8 895602
>>5563 (OP)

>на c# и Unity


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

>>5584

>На ецс


Не запутывай ньюфага.

>>5590

>но хватит ли ее возможностей?


Да, это модульная модель.
https://en.wikipedia.org/wiki/Behavior_tree_(artificial_intelligence,_robotics_and_control)

>НПС можнт попасть в рабство и если уничтожить работорговцев, то он вернется домой


Ну вот твой НИП сидит за решёткой и думает "вот бы вернуться домой", но решётка ему не даёт выполнить эту задачу. Если игрок открывает решётку снаружи, НИП в очередной раз думает "вот бы вернуться домой", система маршрутизации прокладывает ему маршрут и он успешно плетётся домой.

>достаточно гибкой для того, чтобы отсуствие наприиер кровати не ломало всю систему


Это уже только от тебя зависит. НИПу нужно спать, но где? Если он ещё недостаточно сонный, он ищет кровать. Если он слишком сонный, он падает на пол и спит там, где упал, получая дебафф за сон в неположенном месте. Посмотри как работают персонажи в The Sims, Oxygen Not Included и RimWorld - они просто спят где попало на полу, если не могут добраться до кровати (или другого более удобного места для сна, чем пол). Вот если ты реализуешь "сон в любом месте карты", тогда система не сломается, а если нет, тогда сломается. Всё просто.
9 895603
>>5599
А зачем симулировать потребности нпц, когда они за пределами видимости, ведь можно сгенерировать им весь "слепок" истории, как только они попадают в поле зрения игрока.
10 895606
>>5599

>400 НПС


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

Реализуй два режима работы: активный и экономный. В активном НИП совершает все малейшие действия, которые нужны ему для жизни, а в экономном пропускает некоторые незначительные шаги.

Поиск пути в любом режиме нужен. В экономном режиме поиск пути может игнорировать некоторые преграды, например, пропускать персонажа сквозь другого персонажа, но поиск пути всё равно нужен, чтобы персонажи не могли за кадром телепортироваться куда-нибудь в недоступное место.
11 895607
>>5603

>ведь можно сгенерировать им весь "слепок" истории, как только они попадают в поле зрения игрока.


1. Когда персонаж должен попасть в поле зрения игрока? В полной симуляции он своими ножками топает в локацию и может сам выйти к игроку.
2. А что, если в истории будут несостыковки? Боб ушёл в локацию А и весь день спал, а Билл рассказывает, как он весь день гулял с Бобом по локации Б, чего Боб, естественно, не помнит. В полной симуляции таким несостыковкам неоткуда взяться.
12 895608
>>5607
Ну ты же программист, вот и сделай так, чтобы нестыковок не было.
13 895611
>>5602
Что предлагаешь выбрать для изучения ? Behavior tree или GOAP? GOAP кажется более подходящей для этой задачи, но кажется, что будет невозможным сделать случайные события, по типу общения или сбора НПС

И он хуже для производительности вроде как
14 895612
>>5606
Я пытаюсь повторить Банишед. Но там пара поселений, иммитирующих государство. В каждом по 100 человек.

Боюсь что потребности и их выполнение в реальном времени убьет производительность
15 895617
>>5563 (OP)

>Чтобы как в Кенши или Скайриме, до 6:00 спать, работать до 18:00, в 20:00 в заведение


Делаешь скрипт на персонаже. Управляется он либо сам через поиск пути, либо беря точку назначения из менеджера.
Скрипт персонажа активен всегда, всё визуальное скрывается всегда как только пропадает из видимости игрока. Если игрок скипает время то менеджер телепортирует куда надо.
16 895618
>>5617
Достаточно ли скрыть все анимаций, если на карте ( едийнственной ) около 500 НПС со сложным АИ? Какую базу выбрать? GOAP, Behavior tree?
17 895621
>>5618
Если делаешь на Unity, то тебе нужно отключать аниматор, и вместе с этим скрывать весь визуал с коллайдером, и тогда с 500 нпс не будет проблем. Если конечно в каждого не запихнёшь по апдейту в монобехе.
Большие скопления нпс решаются через отдельный менеджер с тиками, а не апдейт в каждом.

>Какую базу выбрать? GOAP, Behavior tree?


В душе не знаю что это.
18 895622
>>5621
Ты все на чистом с# пишешь?
19 895625
>>5621

> Если конечно в каждого не запихнёшь по апдейту в монобехе.


> Большие скопления нпс решаются через отдельный менеджер с тиками, а не апдейт в каждом.


Ыыыв апдейт тяжело ыыыыыыыыыы
20 895647
>>5608

>сделай так, чтобы нестыковок не было


Вот для этого полная симуляция и нужна.

>>5611

>Behavior tree или GOAP


Я сам не разбираюсь в нюансах, но если в общих чертах, то дерево поведения ты должен сам построить как захочешь, а GOAP - это планировщик, который автоматически находит оптимальное решение любой задачи с использованием известных ему инструментов. В дереве ты разбиваешь сложные задачи на мелкие субзадачи, которые можешь решать независимо и по ситуации. А планировщик будет сам выстраивать цепочки действий, которые, по его мнению, приведут к желаемому результату. В примере с кроватью дерево пройдёт по пути: "сонный > нужно спать на кровати > найти кровать > дойти до кровати > лечь на кровать > спать", а GOAP может построить этот путь автоматически, а может построить что-то другое, если что-то другое окажется эффективнее: "сонный > необходимо повысить бодрость > выпить кофе дешевле, чем искать кровать > приготовить кофе > выпить кофе" - в результате, если игра позволяет, GOAP будет пить кофе литрами и никогда не ляжет спать, потому что по его оценке это наиболее эффективная стратегия.

>сделать случайные события


Можно, почему бы и нет?

>по типу общения


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

>сбора НПС


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

>хуже для производительности


>>5612

>Боюсь что потребности и их выполнение в реальном времени убьет производительность


Не занимайся преждевременной оптимизацией, иначе игру вообще никогда не сделаешь.
21 895648
>>5647

>Вот для этого полная симуляция и нужна.


Для игры не нужна. Игра это не симуляция, это "дым и зеркала", создание иллюзии жизни для игрока. Если только сама игра не является игрой в моделирование процессов в городе, и больше там ничего нет.
22 895653
>>5647
Можно ли связать behavior tree и GOAP между собой??

Просто там есть задачи для планировщика и вещи, которые нужно будет выполнять вручную, типо стояния в определенном месте и атака на конкретную локациб
23 895654
>>5648

>Игра это не симуляция


Игры разными бывают.

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

Теперь представь, что ты можешь посмотреть, чем занят каждый сим в каждую минуту времени. Вот сейчас он работает за компьютером в офисе, ты отвлёкся на секунду на другого своего сима и он ВНЕЗАПНО телепортировался на десять этажей вниз и разговаривает с коллегой за обедом в столовой. Что в этом хорошего? Ведь в игре не прошло и минуты, персонаж чисто по логике игрового мира не мог телепортироваться на такое расстояние. Ты ожидаешь увидеть его там же, где и оставил, а не в рандомной точке здания за рандомным занятием. Если он ножками топает 5 реальных минут, то он и за кадром должен топать 5 реальных минут или около того, а не телепортироваться как супергерой какой-то. И так с любой задачей перед ИИ, если от игры требуется симуляция жизни.

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

А ещё будет глупо выглядеть, если за кадром боты справляются со сложнейшими задачами за секунды, а когда на них смотрит игрок - тупят и ударяются головой о каждую преграду на пути.
24 895655
>>5653
Ой. Про эти конкретные задачи ты итак обьяснил.
Нет, я просто опасаюсь полностью положиться на один метод, его функционаллности может не хватит.
25 895656
>>5653
Да всё можно, если захочется. Ты сначала чётко сформулируй задачи, спланируй все игровые события, локации, предметы и действия. А потом будешь думать над конкретными алгоритмами-решениями.

Диздок напиши сначала.
26 895657
>>5655

>полностью положиться на один метод


Если делать всё самостоятельно, то единственное ограничение - твои мозги. Просто не полагайся на API закрытых систем, доступа к которым не имеешь и внутреннюю логику которых не понимаешь.

Для сравнения, хайпанувший OpenAI даёт API, через которое ты можешь запросить решение какой-либо проблемы в текстовом виде у закрытой нейронки. Это возможно прикрутить к играм и даже есть примеры реализаций. Вот только нейронка закрытая, доступа к ней у тебя нет, а если бы даже был доступ - учить нейронку делать именно то, что тебе нужно, а что не нужно - не делать, крайне сложная задача. В итоге нейронку на серверах OpenAI какой-то дядя крутит как хочет, а ты платишь за пустые обещания и ноль реального контроля за ответом нейронки. Нечто серьёзное на такой базе делать невозможно.

А если ты делаешь сам, своим кодом на своём ПК, тебя никто не ограничивает какими-то правилами и условиями договора, делай что хочешь.
27 895683
>>5622
c# не бывает не чистого, ты когда юнити юзаешь можешь полностью что хочешь писаь не оглядываясь на какие-либо стандартные компоненты движка, если они тебе не нужны
28 895808
>>5602

>Не запутывай ньюфага.


А чо ещё делать? На серьёзных щщах советы давать? Ты нормально требования опиши. Алсо.

>400 НПС и это даже не кор геймплей.


У него всё лагать будет с его охуительными идеями и вашими советами тем более. Полный тред дегенератов.
29 895852
>>5808

>Ты нормально требования опиши.


Я не ОП, но ОП хочет какой-то фреймворк, который можно было бы заполнять деталями по желанию.

>это даже не кор геймплей


"Игра это попыт игрока", ето ты?

>У него всё лагать будет с его охуительными идеями и вашими советами тем более.


Да и пусть лагает. Вот слепит лагучий прототип на коленке, убедится в своих идеях и перепишет начисто, с высокой производительностью.

Если сидеть изобретать производительную систему с нуля, не имея никаких набросков игры, то игры никогда и не получится. Зато и лагать нечему, да?
image.jpg160 Кб, 1280x1633
30 896820
>>5602

>Не запутывай ньюфага.


Но ESC это база для таких игр, я сам несколько месяцев разработки своих караванов мечты потратил на переписывания нпси оопшного кода в сущностеблядский.

>>5563 (OP)

>Анон, как теоретический можно написать систему распорядка дня для НПС??



Давай начнем с того, какую игру ты планируешь сделать 2d или 3d и какие у тебя знания. Судя по формулировки вопроса, знания на уровне начинающего программиста.

Если ты планируешь делать 3d, то точно бери в комплекте с unity их технологию dots и разбирайся в ней, пока не поймешь.

Если 2d и проект небольшой, то все можно заооптимизировать и на обычном ООП, без премудростей. Просто у dots пока есть проблемы с рендерингом 2d спрайтов и написание своего шейдера займет у тебя много времени и сил.

В треде уже были идеи с

> Behavior tree


> Goap



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

Сами же потребности я, к примеру, понижаю через внешние источники.

>Есть ли ролики на ютубе или руководства?


Комплексные ролики не видел, но по частям что-то нагуглить можно без проблем.
31 896854
>>5563 (OP)
Посмотри как в скайриме сделаны AI package. Там есть стандартный набор пакетов, т.е. обычный распорядок дня. Если НПС вдруг становится частью квеста, ему можно задать кастомные аи пакеты, которые будут выполнятся вместо основных. Т.к. в скайриме все делается через квесты (даже случайные разговоры), то это как-то работает.
Обновить тред
« /gd/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

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