ПРИМЕЧАНИЕ: я спрашивал об этом в Stack Overflow несколько дней назад, но у меня было очень мало просмотров и никакого ответа. Решил, что я должен спросить на gamdev.stackexchange вместо этого.
Это общий вопрос / просьба о совете по поддержке системы процедурного генерирования посредством нескольких обновлений после выпуска, не нарушая ранее сгенерированный контент.
Я пытаюсь найти информацию и методы, позволяющие избежать проблем с «эффектом бабочки» при создании процедурного контента для игр. При использовании заполненного генератора случайных чисел повторяющаяся последовательность случайных чисел может использоваться для создания воспроизводимого мира. В то время как некоторые игры просто сохраняют сгенерированный мир на диск после генерации, одной из мощных особенностей процедурной генерации является тот факт, что вы можете положиться на воспроизводимость числовой последовательности, чтобы воссоздать регион несколько раз одним и тем же способом, устраняя необходимость упорство. Из-за ограничений моей конкретной ситуации я должен свести к минимуму постоянство, и мне нужно как можно больше полагаться на чисто посеянный концентрат.
Главная опасность в этом подходе состоит в том, что даже малейшее изменение в процедурной системе генерации может вызвать эффект бабочки, который меняет весь мир. Это очень усложняет обновление игры, не разрушая миры, которые исследуют игроки.
Основной метод, который я использовал, чтобы избежать этой проблемы, состоит в том, чтобы разработать процедурную генерацию в несколько фаз, каждая из которых имеет собственный генератор случайных чисел. Это означает, что каждая подсистема автономна, и если что-то сломается, это не повлияет на все в мире. Однако, похоже, что он все еще имеет большой потенциал для «поломки», даже если он находится в изолированной части игры.
Другим возможным способом решения этой проблемы может быть поддержание полных версий ваших генераторов в коде и продолжение использования правильного генератора для данного экземпляра мира. Это кажется мне кошмаром технического обслуживания, и мне любопытно, действительно ли кто-то делает это.
Итак, мой вопрос на самом деле - запрос общих советов, методов и шаблонов дизайна для решения этой проблемы с эффектом бабочки, особенно в контексте пост-релизных обновлений игры. (Надеюсь, это не слишком широкий вопрос.)
В настоящее время я работаю в Unity3D / C #, хотя это не зависит от языка.
ОБНОВИТЬ:
Спасибо за ответы.
Все больше и больше похоже на то, что статические данные - это лучший и самый безопасный подход, а также то, что при хранении большого количества статических данных не вариант, для длинной кампании в сгенерированном мире потребуется строгое управление версиями используемых генераторов. Причиной ограничения в моем случае является необходимость сохранения / синхронизации на основе мобильного облака. Мое решение может заключаться в том, чтобы найти способы хранения небольших объемов компактных данных о важных вещах.
Я нахожу концепцию Штормграда «Клетки» особенно полезным способом мышления о вещах. Клетка - это, по сути, точка пересева, предотвращающая побочные эффекты небольших изменений, т. Е. Клетка-бабочка.