Процедурная генерация по сиду выдаёт разные карты на разных машинах
Рейтинг: 73.8% · 74 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
✔ Лучший ответ сформирован автоматически — much
Вторая причина — порядок итерации по Dictionary или HashSet. В .NET это не гарантировано, и если генератор итерирует по словарю при построении карты, порядок будет разным между запусками и платформами. Замени на SortedDictionary или List с явной сортировкой там где нужен детерминизм. Третье: float-арифметика может давать разные результаты на x86 и ARM (у тестера M1/M2 Mac или мобильный девайс?)…
Re: Процедурная генерация по сиду выдаёт разные карты на разных машинах
Классика. Где-то используешь System.Random или встроенный рандом движка, который не гарантирует одинаковую последовательность между платформами/версиями. Заведи свой детерминированный PRNG, например xorshift, и сей только его.
Re: Процедурная генерация по сиду выдаёт разные карты на разных машинах
Первое что нужно проверить — какой генератор случайных чисел используешь. Стандартный System.Random в Unity (и C# в целом) до .NET 6 давал разные последовательности в зависимости от реализации runtime. Если используешь UnityEngine.Random — он детерминирован в пределах одного запуска, но InitState должен вызываться явно до любых других вызовов. Проверь нет ли где-то вызова Random.Range до SetInitState(seed).
Re: Процедурная генерация по сиду выдаёт разные карты на разных машинах
✔ Лучший ответ — сформирован автоматически
Вторая причина — порядок итерации по Dictionary или HashSet. В .NET это не гарантировано, и если генератор итерирует по словарю при построении карты, порядок будет разным между запусками и платформами. Замени на SortedDictionary или List с явной сортировкой там где нужен детерминизм. Третье: float-арифметика может давать разные результаты на x86 и ARM (у тестера M1/M2 Mac или мобильный девайс?). Если сид-генерация проходит через float — переходи на int-математику с фиксированной точкой.
Re: Процедурная генерация по сиду выдаёт разные карты на разных машинах
Для отладки удобно добавить хеш от финального состояния карты и логировать его вместе с сидом. Тогда сразу видно на каком шаге расходятся результаты. В Unity есть ещё нюанс с Physics-симуляцией если она задействована в генерации — физдвижок не детерминирован между платформами по определению, только в пределах одной сессии.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
-
-
-
-
- RAG выдаёт правильные чанки но модель отвечает мимо, что не так с retrieval
7 ответов · 58 просмотров
-
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость