注:数日前にStack Overflowでこれを尋ねましたが、ビューが非常に少なく応答がありませんでした。代わりにgamdev.stackexchangeで尋ねるべきだと考えました。
これは、以前に生成されたコンテンツを壊すことなく、複数のリリース後更新を通じて手続き型生成システムを維持することに関する一般的な質問/アドバイスです。
ゲームの手続き型コンテンツを作成するときに、「バタフライ効果」の問題を回避するための情報と手法を見つけようとしています。シードされた乱数ジェネレータを使用する場合、乱数の繰り返しシーケンスを使用して、再現可能な世界を作成できます。一部のゲームは、生成された世界を生成後にディスクに保存するだけですが、手続き型生成の強力な機能の1つは、同じ方法で領域を再作成するために数列の再現性に複数回頼ることができるということです。持続。私の特定の状況の制約のため、永続性を最小限に抑える必要があり、純粋にシードされた濃度にできるだけ依存する必要があります。
このアプローチの主な危険性は、手続き型生成システムのわずかな変更でさえ、世界全体を変更する蝶の影響を引き起こす可能性があることです。これにより、プレイヤーが探索している世界を破壊することなくゲームを更新するのは非常に難しくなります。
この問題を回避するために私が使用してきた主な手法は、複数のフェーズで手続き型生成を設計することです。各フェーズには、独自のシード乱数ジェネレーターがあります。つまり、各サブシステムは自己完結型であり、何かが壊れても、世界のすべてに影響を与えることはありません。ただし、これはゲームの孤立した部分であっても、依然として「破損」の可能性が多いようです。
この問題に対処するもう1つの方法は、コード内でジェネレーターの完全なバージョンを維持し、特定のワールドインスタンスに適切なジェネレーターを使い続けることです。これは私にとってはメンテナンスの悪夢のように思えますが、誰かが実際にこれを行っているかどうか知りたいです。
したがって、私の質問は、特にバタフライ効果のこの問題に対処するための、特にリリース後のゲームアップデートのコンテキストでの一般的なアドバイス、テクニック、およびデザインパターンの要求です。(うまくいけば、それは広すぎる質問ではありません。)
現在Unity3D / C#で作業していますが、これは言語にとらわれない質問です。
更新:
返信ありがとうございます。
ますます静的データが最良かつ最も安全なアプローチであるように見えます。また、大量の静的データを保存することはオプションではない場合、生成された世界で長いキャンペーンを行うには、使用されるジェネレーターの厳密なバージョン管理が必要になります。私の場合の制限の理由は、モバイルベースのクラウドの保存/同期の必要性です。私の解決策は、重要な事柄に関する少量のコンパクトデータを格納する方法を見つけることかもしれません。
ストームウィンドの「ケージ」の概念は、物事を考える上で特に有用な方法だと思います。ケージは基本的には再シードポイントであり、小さな変更、つまりバタフライのケージの実行に伴う影響を防ぎます。