カスタムゲームエンジンの場合、コアデータの形式が正しくない、または欠落している場合はどうすればよいですか?


27

ゲーム用のカスタムエンジンを作成しています。代わりにミドルウェアを使用する理由を理解する前にこのゲームを開始しましたが、書き直すにはあまりにも遠すぎます。

私のデータの大部分は外部ファイルからのものであり、単にアセットを参照するのではありません。すべてのゲームオブジェクトを.JSONで定義します。しかし、悲しいかな、私は人間です。データファイルが無効な場合や、フォーマットを変更したがファイルの更新を忘れたり、ローダー自体が完全にバグがある場合があります。

何らかの理由で、カスタムエンジンで何らかの形式のアセットをロードしようとして失敗した場合、どのようなオプションがありますか?

これは、不足しているリソースどのように処理すればよいですか?、その質問はモデルやテクスチャなどのユーザー向けアセットに関するものです。悪いテクスチャはチェッカーボードに、悪い音は無音に、悪いテキストは「エラー」に置き換えることができます。私の問題は、レベル、ゲームオブジェクトの定義、GUIレイアウトなど、ゲームを実行する上でも重要なデータにあります。


7
ゲームにも同様のアプローチを使用します。実際に、ゲームデータファイルを生成してヒューマンエラーを回避する小さなユーティリティアプリを作成しました。この方法では、100,000行のJSONを手動で記述しなくても変更を加えたい場合にファイルを変更できます。
JDSweetBeat

データをロードする前に、バリデーターを介して実行することもできます。
-JDSweetBeat

私のJSONは十分に小さいため、自動的に生成しても役に立たないでしょう。また、JSONが欠落している場合、またはそれを読み取ることになっているものにバグがある場合、バリデーターは役に立ちません。しかし、考えてくれてありがとう。
JesseTG

回答:


44

エラーを記録し、正常に終了します。

理想的には、画面にも人間が読めるエラーを表示します。これらのデータファイルなしで動作するハードコードされた機能のコアパイプラインが必要です。そもそもデータファイルを読み込むのと同じパイプラインです。これらのコアデータファイルが破損しているか、そうでない場合は障害を検出して、アプリケーションを終了できる必要があります。ユーザーがこれらのファイルを変更することを意図している場合、他にできることはあまりありません。それ以外の場合は、この種の破損が発生しないことを確認するテスト戦略を実装する必要があります。その後、有効なデータファイルのみをリリースしていることを確認できます。


12

Byte56は1つのオプションに言及しました。他にも少なくとも1つあります。

デフォルト値を想定して、警告を表示します。

データの性質によっては、いくつかのデフォルト値を想定し、「ファイルxxxの読み込みに失敗したため、汎用yyyオブジェクトを使用している」ことをユーザーに警告することは完全に受け入れられるかもしれません。


6

これは、開発中またはリリース中に発生するかどうかによって異なります。

開発中、あらゆる種類の物事、エラー、混乱を絶えず常に抱えており、ゲームの実行中にオンデマンドでアセットを「ホット」ロードしたり、アセットを交換したりすることもできます。ゲームの実行中にスクリプトを編集して、AIのパフォーマンスなどをテストできます。

プログラムがエラーダイアログを表示して毎回終了する場合は、最も厄介です。再起動する必要があり、2〜3分かかります。開発の目標は、できるだけ時間をかけないようにすることです(時間は最も貴重な資産です)。
したがって、たとえば、テクスチャが欠落している場合、赤と白の市松模様のようなものを見たいと思うでしょう。その上に置換テクスチャとして「missing」という単語が綴られているかもしれません。 。ただし、ゲームを正常に終了したり、クラッシュしたりすることは望ましくありません。ログファイルに何が欠けているかについての詳細な情報は非常に役立ちます。

一方、リリースでは、アセットファイルの完全なセットが理想的には[1]自動アセットパイプラインを通過している必要があります。これは、すべてのJSONを読み取り、すべてのモジュールがそれ自体で一貫していることをクロスチェックし、参照するすべてのアセットが実際にそこにあることを確認し、ファイル全体を圧縮する単純なパーサー以上である必要はありませんエンジンが読みやすい既知の(必ずしも標準ではない)方法で、必要に応じていくつかのチェックサムを追加します。

あなたは知っているあなたのパイプラインを使用すると、エンドユーザーにパッケージをリリースする前に、すべてがあったので、チェックを何の障害もないことを。そのため、障害が発生した場合、送信エラーが発生したか、ユーザーがチートを試みている可能性が高くなります。どちらの場合でも、プログラムは資産ファイルが破損していることを示すメッセージを表示して終了します。

または、インターネットから資産の元のコピーをダウンロードするオプションを提供することもできます(ダウンロードサーバーがある場合)。ただし、カスタマーサポートの悪夢を避けるために、ギガバイトのデータをダウンロードする前に必ず確認してください


[1]現実は異なって見えるかもしれませんし、メーカーが「知っている」はずのAAAタイトルで行方不明のアセットを見つけるかもしれませんが、通常彼らは非現実的な締め切りと大きな変化するチームも持っています。理想的には、出荷するすべてのものが自動化されたパイプラインを通過し、完全であることが保証されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.