プロトタイプを作成するときに、ゲームの動作をより簡単に調べるにはどうすればよいですか?


49

私は自分でインディーゲームを作成しますが、通常、新しく開発されたゲームをビヘイビアーでプレイできるレベルにすると、エネルギーが足りなくなるため、探索ではなく洗練に取り組みます。ひどい結果で。

洗練と探査
Intercomブログから写真)

たとえば、動作の微調整(つまり、C ++アプリケーションのリンクと再起動)の反復サイクルが非常に長く、すべての創造性が失われることがわかりました。これに対処するツールを作成しています。

ゲームの振る舞いをすばやく探索する他の方法はありますか?私は、インディー開発者と大企業が使用する方法論に興味があります。


1
それはとてもいい写真です。これ、どこから来たの?
スーパーベスト

あなたがしていることは正式に「ユニットテスト」と呼ばれていると思います。特にゲームの小さな部分を一度に微調整したい場合はそうです。残念ながら、ゲームはコンポーネントを分離するのが難しく、テスト自体を自動化するのが難しいため(実際に合格/不合格を判断できるように)、実際のユニットテストは困難です。ただし、単体テスト戦略について読むと、役に立つアイデアが得られる場合があります。
スーパーベスト

5
@Superbest:ユニットテストを徹底的に知っているので、動作の調査をユニットテストと比較することはできません。動作を調査する場合、関連するアセットとともに、ゲームエンジンのほとんどをロードする必要があります。単体テストは、目的地を知っている場合にのみ行われます。この場合、誰も知りません。それが「精錬」ではなく「探検」である理由です。PIC インターホンのブログ
ジョナスビストレム

デバッグモードでテストしているとき、(少なくともVisual Studioで)一時停止するときにコードを変更できます。限り、あなたは多くの(機能ヘッダなど)に変更しないよう、あなただけの短いコンパイル時間で、あなたの一時停止のゲームでそれを読み込むことができます
トビアスB

@TobiasB:実際には、残念ながら役に立たないことがわかりました。特に、通常はゲームメカニックがスクリプト、既にインスタンス化されたゲームオブジェクト、アセットなどに広がっているためです。無料のVisual Expressでサポートされているかどうかはわかりませんが、実際に14年間使用していません。:)
ジョナスビストロン

回答:


30

既に述べたように、ゲームメカニクスに取り組んでいる場合、反復の速度が重要です。修正を考えてからその修正でテストできるようになるまでの時間が長いほど、生産性が低下し、気が散ることになります。結果として、間違いなく反復時間を管理する必要があります。

私にとって、単純な変更をテストする時間が約5秒を超えると、生産性が本当に低下し始めます。そのため、ゲームのフィーリングを完璧にするために実験しているとき、目標の1つは「どのように変更を加え、その変更を5秒以内に使用するか」を理解する必要があります。反復時間をそのレベル程度に抑えることができる限り、どのように実行するかは実際には関係ありません。

多くの大きな近代的なエンジン(Unity、Unrealなど)は、エディターをゲームエンジン内に配置することでこれを行う傾向があるため、ゲームを再起動することなく、ほとんどの変更をライブで行うことができます。より小さなエンジン/ゲームは通常、作業を他の方向に集中させます。ゲームをコンパイルして起動するのが非常に速いので、変更ごとにゲームを再起動する必要があるかどうかは関係ありません。5秒間が終了する前にテストを継続します。

私の現在のプロジェクトでは、小さな再コンパイル、リンク、ゲームの起動、そしてゲームプレイへの到達に約10秒かかります(そのほとんどは、保存されたゲームをロードするときにレンダリング可能なワールドジオメトリを生成しています)。そしてそれは長すぎます。そこで、実際のゲームアセットをすべてロードせずにゲームのさまざまな部分をテストできるように、個別の「テスト」ゲームモードを作成しました。通常、約2〜3秒かかります。UIをテストしたい場合は、実際のゲームにロードせずにそれを行うことができます。レンダリングをテストしたい場合は、ゲームシステム全体をロードせずに、レンダリングをテストできる別のモードがあります。

ゲームロジックをDLLに配置し、ゲームの実行中にメモリ内のゲームの実行可能ファイルにDLLを再読み込みさせることで問題に取り組んでいる他の人々を見てきましたので、DLLを再構築して既にロードされた実行可能ファイルなので、ゲームのアートアセットをリロード/再構築する必要はありません。これは私にとっては狂気のように思えますが、私はそれを成し遂げたのを見てきました。

それよりもはるかに簡単なのは、ゲームの動作や設定をスクリプトまたはデータファイルで指定し、システムにそれらのファイルを要求に応じて再ロードする方法を提供するか、おそらく変更を監視する方法を提供することです。ゲームを停止し、再リンクして、再度起動します。

たくさんのアプローチがあります。最適なものを選択してください。しかし、ゲームメカニックの改良を成功させるための鍵の1つは、非常に迅速な反復です。それがなければ、他に何をしても大丈夫です。


3
「テスト」ゲームモードについて詳しく教えてください。繰り返したい部分ごとに、あちこちでゲームのスライスを作成しますか?「スライス」を設定するにはどれくらいの時間が必要ですか?取り残されたものとその方法は?この種類の「ゲームの保存」と「ゲームの読み込み」のような機能を持っていますか、それとも一般的ではありませんか?
ジョナスビストレム

2
@JonasByström彼については知りませんが、ゲームの状態をうまく制御できる場合IF DEBUG、「テスト」状態(ゲームメニューをスキップ)に直接移行する代替の「デバッグ」バージョン(多くの場合、リテラルコンパイラディレクティブ)を持つことができます。など)、これは、私がその時点でテストしているあらゆるアセットを備えた、単なる骨の遊び場です。したがって、基本的に、非常に必要なレベルを自動的にロードする代替の実行可能ファイルをコンパイルします(ロードするアセットが少なく、毎回ゲームメニューをいじる必要はありません)。
Superbest

@JonasByströmゲームを「モード」に分割します。基本的には大きな状態マシンです。そのため、通常、「タイトル画面」モード、「ゲーム内」モード、「クレジットスクロール」モードなどがあります。これらは、実行可能ファイル内に埋め込まれたゲームのようなものです。私の「テスト」モードは「UITest」のようなもので、他のゲームコンテンツをロードせずに、ユーザーインターフェイスの一部をロードして描画するだけです。または、「RenderTest」。特定のオブジェクトをロードして描画しますが、他には何もロードしません。
トレバーパウエル

@JonasByström新しいテストモードを作成する必要がある場合、通常、テストする特定のものとそれが持つ依存関係をセットアップするコードを記述するのに数分かかります。または、既存のテストモードを数秒で調整することもできます(たとえば、通常は既存のUITestモードを変更して、新しいUIを作成するのではなく、別のUIをロードします)。ただし、セットアップにかかる時間はそれほど重要ではありません。重要なのは、一度設定すれば、とてつもなく速い速度で反復できるので、その反復時間中に生産性が維持されるということです。
トレバーパウエル

1
@JonasByströmまた、「高速なコンピューターを購入する」ことも、「反復時間を短縮する方法」の問題に対する完全に合法的なソリューションであることに注意する価値があります。そして、多くの場合、特別なテスト装置の実装に時間を費やすことと比較すると、最も安価なソリューションになります。反復時間を短縮することは、多くの時間/お金/労力を先行投資する投資ですが、将来的には多くの利益をもたらします。
トレバーパウエル

20

適切にプロトタイプを作成するには、アイデアをテストするコストを削減します。

私のワークフローは小さなゲーム用に調整されていますが、次のことが役立つことがわかりました。

  • プロトタイプに優しいハイテク  私のきは、次のような、動的なプログラミング言語やフレームワークを使用することが役に立ったと評価していLuaの愛は 2Dのための素晴らしいです)、JavaScriptのLispの / スキーム何かをするプログラムを得ることがさえコストで、最小限のキーストロークが必要です他のすべての。目的を理解し、それを改良したい場合は、最適化するか、他のエンジンに移植してください。
  • バージョン管理リビジョン管理されたリポジトリに プロトタイプを保持します。早く分岐し、頻繁に分岐します。これにより、何かを失ったり忘れたりする心配をせずに、快適に物事を試すことができます。(Gitには最も安価な分岐モデルがあります。)
  • ビルドの自動化  実際に実行するために必要なことをできるだけ少なくする必要があります。私の意見では、ボタンを押さなければならないことすら多すぎます。通常Makefilemake watchターゲットをinotifywaitループで実行し、ゲームを自動的にコンパイル/実行することでファイルの変更に反応します。インタプリタ言語またはJITコンパイル言語では、これは瞬時に行われます。

1
Luaはホットスワップコードをサポートしていないようです。それは、変更をテストするためにゲーム/プロトタイプを再起動する必要があるということですか?
ジョナスビストレム

6
Luaコードのホットスワップは間違いなく可能です。
ジョシュ

1
@JonasByström可能ですが、適切な環境下でのみ可能です。見つからない場合は、作成してください。LuaのソースコードはCで記述されているため、Cスタイルの関数呼び出しを受け入れるものであれば何でも移植できます。OpenGL、SDL 2、またはその他のグラフィックス/ハードウェアラッピングライブラリと混合して、ホットスワップIDEを構築します。
ファラプ

2
@JonasByström これは、IDEサポートありとなしで行う方法です。
アンコ

2
@JonasByström:...月に戻ることを除いて、どうやら。:(
メイソンウィーラー

11

主にプロトタイピングに焦点を合わせた開発者として、私の経験から少しアドバイスをします。

  1. 変更を迅速に行えるエンジンを使用します。これには、「コンパイルを待っていない」、「実行時に変更する」、「デバッグの容易さ」、「テスト資産の可用性」などが含まれます。私は個人的にUnity3Dが大好きですが最高のツールではありません。最適なツールはゲームに依存します。たとえば、Unreal EngineはUnity3Dよりもコードのコンパイル速度が遅くなりますが、接続された複数のクライアントをすばやく起動できます。ネットワーク化されたゲームの場合、これはしばしばコンパイルのコストを相殺します。親しみも考慮してください。C ++を使いこなせば、最高のJavascriptエンジンでさえもそれほどうまくいかず、その逆も同様です。なじみのない技術に苦労する時間を費やさないでください(つまり、他の言語/フレームワークを学びますが、同時に重要なプロトタイプを作成することはしません)。
  2. 既存の機能を容赦なく廃棄する方法を学びます。既に実装したものに固執することは、プロトタイピングを成功させるための忌み嫌いですが、作業を手放すことは困難です。
  3. ゲームデザイナーと一緒に仕事をしていない場合は、「プログラマーの帽子をかぶる」と「デザイナーの帽子をかぶる」の間に明確な線を入れてください。新しいクールなゲームプレイ機能を追加することは非常に魅力的ですが、デザイナーの立場にあるときにそうしないでください。むしろ、あなたが持っているもので楽しいゲームプレイ(できれば複数のバリエーション)を作成してみてください。助けとなり機能のリスト作り、その後(の一部)を実装して。
  4. ラピッドプロトタイピングでは、2つの正反対のバランスを取ります。可能な限り高速のものを作りたいので、悪いコードを書きます。ただし、可能な限り変更したいので、良いコードを書く必要があります!これら2つのバランスを取ることを学びます。申し訳ありませんが、実際にこれを行う方法に関する具体的なアドバイスは考えられませんが、少なくともこの問題を意識してください(-8

プロトタイピングに必要な時間を見てください。私の経験では、最大2日間で何でもプレイ可能なバージョンが必要です-最初から始めます。毎日1つまたは2つの新しい機能をテストする必要があります。これらの目標を達成していない場合は、高速化する方法を探してください。


機能は行動探索とは異なると考えています。「感触」を探求したい。機能は、私にとって美しいレンダリングのようなものです。本質的ではなく、ゲームの楽しさとは関係ありません。Minecraft、Candy Crush、Tetrisなどのゲームは、私見であることを証明しています。
ジョナスビストレム

@JonasByström明確にするために、ここで「機能」とは、ゲームプレイの本質的な変更を意味します。つまり、特に美しいレンダリングではありませんが、Minecraftのプロトタイプを作成するときに、「ブロックを作成する方法を追加する」や「プレーヤーを攻撃して殺すMobを追加する」などです。
ネバーマインド

1
2番目のポイントである「機能を解放する」の重要性は誇張することはできません。実装に2週間かかった失敗した機能に「ノー」と言わないため、多くの探索段階が失敗します。
コスタ

ポイント4についてのメモ。これの鍵は、コードをすばやく変更するために必要なものを理解することだと思います。微調整したいことがわかっている値を必ず公開してください。ゲームプレイにそれほど影響を与えないことがわかっている場合は、コードの他のセクションを埋めたままにして、後で必要に応じて公開します。これをすぐに解決する必要がありますが、「ゲームデザイン」の要素が正面を向いて、可能な限りきれいになるように、goからアーキテクチャを設計しようとすると、残りは無駄になります。
sydan

1
@sydanの不幸な真実は、どのコードが「前向き」であるかについてのあなたの考えは間違っているということです。つまり、決して変更してはならないものは、実際には非常に動的なものであることが常に判明しています。プロトタイプを作成するときは、文字通りすべての側面を変更する準備ができていて、それを迅速に行う必要があります。
ネヴァーマインド

5

ゲーム開発をこれらの4つのフェーズに分割できます。

  • プロトタイピング
  • ゲームプレイの洗練
  • 開発
  • パフォーマンスの改善

ゲームプレイの調査は、主にプロトタイプ作成段階で行われると信じています。これらは、私が従おうとするいくつかのアドバイスです。

  • 紙のプロトタイプから設計を開始します。ゲームがどのようなものになるかを明確に理解したら、コーディングを開始して、実際に相互作用を感じることができます。これは3Dゲームには役に立たないかもしれませんが、個人的には過去に非常に役立っています。

  • 完了後にコードを破棄することを知っているコード。これにより、どのゲームエンジンを選択するかが自由になります。

  • 高速反復サイクルは重要です(他の人が以前指摘したように)。コーディングしたものをすばやく表示する機能に基づいて、ゲームエンジンを選択します。また、この段階でパフォーマンスやグラフィックの忠実度を気にする必要もありません。

  • スコープを制限します。実際のゲームプレイが2D(通常の戦略ゲーム、JRPG)の場合、2Dでプロトタイプを作成します。このフェーズでは、ゲームプレイに関するフィードバックのみを考慮します。

  • 資産の研磨や検索に時間を無駄にしないでください。紙に何かを走り書きし、写真を撮り、Photoshopで切り取り、色付けしてスプライトとして使用します。マイクをオンにして、「ピューピュー」と言います。2つの立方体と1つの球を一緒に置くと、ロボットができます。ゲームプレイの可能性を探ることが最優先事項です。

楽しいプロトタイプを決定したら、改良を始めます。それを必要とするゲームプレイ要素がある場合を除き、技術を切り替える理由はまだないと思います。

開発段階の後半では、洗練されたプロトタイプを手元に置いて、見た目が良く、サウンドも良く、感覚の良い新しいゲームを開発します。ここでは、使用する実際のゲームエンジンを選択する必要があります。

最後に、持っているものを取り、それを調整して、使用するリソースを減らします。

上記で説明した内容のほとんどは常識ですが、リストに記載し、開発プロセス全体を区分することで、各ステップを視野に入れるのに役立ちます。それもあなたのお役に立てば幸いです。


1
紙の写真と「ピューピュー」は素晴らしいアドバイスです。そしてはい-リストも私を助けます。「上位3つの優先順位を特定します。2番目と3番目の数字を捨てます。」:)
ジョナスビストロン

4

トレバー・パウエルの答えに同意します。反復する速度は、ただ磨くのではなく創造的な雰囲気を保つために重要です。私にとって大きなインスピレーションの源は、ブレット・ビクターの講演「Inventing on Principle」です。残念ながら、そのレベルで実際のツールを見つけることは困難です。入力中にPythonコードを実行できるPython開発用に自分でビルドしようとしました。PythonのLive Codingと呼ばれます。


1
私は前にビデオを見たことがありますが、それを忘れていました。ふむ 即時の相互作用は本当に努力するべきものです。あなたのアドバイスに基づいて行動しようとします。興味深いLive Codingプラグインは良い仕事です!
ジョナスビストロン

2

Trabantと呼ばれるプロトタイピングツールを作成しました。

  • 3Dおよびゲームメカニックのみ(UIなし、テキストなし、なし)。
  • プロトタイプを構築するのに必要なコードはごくわずかであり資産は必要ありません
  • 3Dモデルは、ASCIIアートを使用してコードで作成されます
  • 1秒未満の反復を許可します。
  • 剛体シミュレーションをサポートしています。
  • Windows、Mac、Linux、iOSで動作します。
  • よく知られている汎用言語Pythonを使用します。
  • WindowsおよびiOS用のIDEがあります。

上記を検証するために、30個のテストプロトタイプを作成しました。

以下のようトレバー・パウエルが 強調反復は<5秒である必要があり、私は良いとして、<1秒の反復のほぼ5倍を見つけます。:)

Anko は、動的言語を使用するのは良いアイデアであると述べましたが、Pythonは最も広く使用されているPythonの1つです。ビルドの自動化に関しては、TrabantでのテストはIDEでF5(またはiPadでテストするにはF6)を押すのと同じくらい迅速であり、ビルドステップが含まれていないため、これよりもすぐに取得することはできません。

使い捨てコードは、Nevermindの 持ち帰りの 1つでした。私は完全に同意し、トラバントはそれを強制します。


1

本当に重要なTrevor Powellの反復速度に加えて、他の有用な考慮事項がいくつかあります:

そのような良いコード...

たくさんのIFがあります。

コンセプトがしっかりしているほど、いじる必要が少なくなります。あなたが何をしようとしているのかを知っているなら、プロトタイピングは、何を置くか、そして中央の柱(あなたの主なもの)に関連して物事を整理する方法になります。

あなたが他の多くの人と同じように始めている場合-あなたが何をしたいのかよく分からない場合、あなたは方向に向かって、あなたが示したイメージの方法で多くを探索します。

いずれにしても、探しているものを深く掘り下げることなくシミュレートできるのであれば、テクノロジーへのコミットメントは関係ありません。

リソースを1秒余分に無駄にしないでください。インターネットからすべてをダウンロードします。所有権があるかどうか。あなたは仕事で自分のコンセプトを感じたいと思っています-グラフィックスが主な機能でない限り、誰も他の人の音、テクスチャ、その他すべての実験を求めて訴えることはありませんが、まだそれを店の棚に置いているわけではありません。既に資金が提供されている場合を除き、人々にコンセプトが価値があることを納得させることは、あなたが望むリソースを得るためのお金を得ることになります。私は、ゲームスタジオの人々が、彼らが権利を持たないプロプライエタリゲームの改造版でゲームコンセプトを提示するのを見てきました。

スケールモデルを構築しているようです。あなたが望むものの小型化された人生のレプリカを持つことは素晴らしいことです。雑誌から切り取って、手作業で作り、それらを接着するのに十分な場合もあります。想像力に乏しい人なら誰でも、実際にスケールモデルを見せたのと同じ段ボールから超高層ビルを構築するとは思いません。そして、クリエイティブ業界では、想像力のある人と仕事をするのがより好ましいです。彼らがいくつかの草案の問題を過ぎてコンセプト全体の背後にある可能性を見ることができない場合、彼らは製品を高く評価することはめったにありません。感謝は、彼らがコミットする意志が少なく、それが下方スパイラルであることを意味します。世界を征服するために子供の態度を設定することと、代わりに「あなたは靴をきちんと結ぶことすらできません。

あなたが何をしていても、常に態度だけを覚えていれば、その技術的または経済的可能性にかかわらず、絶対に何かを台無しにするのに十分です。

私はかつてgif画像のみを使用してゲームをプロトタイプ化し、JavaScriptに少し関係を持たせました。まばゆいばかりではありませんが、私が見せたいものを見せることを目的としていました。後でXbox専用に開発するかどうかは関係ありません。

あなたのアイデアが単純なプロトタイプよりも複雑な場合は、使用する技術に研究を加える必要があります-プロトタイプは最終的なものの足場になるからです(多くのことに投資されているからです)それを軽く捨てることはできません)-明らかに承認された場合。


プロトタイピングは、何か新しいものを構築する場合にのみ必要です。それは当然のことです。ツールの不足は、ペンと紙の不足のようなものです-そして、あなたは砂で描くことができますが、それは非効率的です。私は、構築されたトラバントを GIF + JSまたは移動することを避けるためにスクラッチを
ジョナスビストレム16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.