ビデオゲームプログラミング

ゲームプログラミングは、ゲーム開発のサブセットであり、ビデオゲームソフトウェア開発です。ゲームプログラミングには、特定の言語でのソフトウェアエンジニアリングコンピュータプログラミングに関する相当のスキルと、シミュレーションコンピュータグラフィックス人工知能物理学オーディオプログラミング入力のうち、 1つ以上の分野の専門知識が必要ですマルチプレイヤーゲームの場合、ネットワークプログラミングの知識が必要です(結果のコードは、そのパフォーマンス特性に加えて、プレイヤーとプログラマーのどちらも、ゲームのネットコードと一般的に呼んでいます)。格闘ゲームなどの一部のジャンルでは、ネットコードとその特性(レイテンシなど)がプレイヤーや批評家からゲームの品質を示す最も重要な指標の一部と見なされているため、高度なネットワークプログラミングが求められることがよくあります。大規模多人数同時参加型オンラインゲーム(MMOG)の場合、データベースプログラミングと高度なネットワークプログラミングに関するさらなる知識が必要です。プロのゲームプログラマーが従事することも多いが、パブリッシング会社との関係を持たない独立系開発者のシーンも活況を呈している。

開発プロセス

プロのゲーム開発は通常、ゲームデザインから始まります。ゲームデザイン自体には、いくつかの起源があります。時には、明確なデザインを念頭に置かず、一連の実験からゲーム開発プロセスが始まることもあります。例えば、ゲームデザイナーの ウィル・ライトは、プログラマーにいくつかのアイデアを試してもらうことから『シムズ』の開発を始めました

プロトタイピング

プログラマーは、ゲームプレイのアイデアや機能のプロトタイプを作成することがよくあります。設計書が完成する前のプリプロダクション段階では、多くのプロトタイピングが行われ、設計で指定される機能を決定するのに役立ちます。

プロトタイプは、事前の設計にほとんど時間をかけずに迅速に開発され、主に概念実証やアイデアのテストとして機能します。完璧に動作することは期待されていませんが、新しい、時には奇抜なアイデアを試すために開発されます。

ゲームデザイン

プログラマーの主な仕事はゲームデザインの開発ではありませんが、ゲームアーティストと同様に、プログラマーもデザインに貢献することがよくあります。ゲームデザイナーは、プロデューサーとアート/プログラミングリーダーの両方から意見を求め、ゲームデザインのアイデアや戦略を検討します。コピーライターや他のプログラマー、アーティストなど、リーダー以外の立場の人も貢献することがよくあります

プログラマーはゲーム設計書を厳密に遵守することがよくあります。ゲーム開発が進むにつれて、プログラミング上の制限や新しい機能が発見され、活用されるにつれて、設計書は変更されます。

生産

制作過程において、プログラマーはゲームの設計図に記述されたゲームを作成するために、大量のソースコードを作成します。その過程で、設計図は制限事項を満たすために修正されたり、新機能を活用するために拡張されたりします。設計図はまさに「生きた文書」であり、その寿命はプログラマーのスケジュール、才能、そして機転によって大きく左右されます。

多くのプログラマーはゲームの内容についてある程度の発言権を持っていますが、ほとんどのゲームプロデューサーは、ゲームプログラミング開発の状況についてリードプログラマーに意見を求めます。リードプログラマーは、ゲームのプログラミングのあらゆる側面の状況を把握し、制限事項を指摘する責任があります。また、リードプログラマーは、プログラマーから実装したい機能に関する提案を伝えることもあります。

今日の視覚的に豊かなコンテンツでは、プログラマーはアートスタッフと頻繁にやり取りをしなければなりません。もちろん、これはプログラマーの役割によって大きく異なります。たとえば、3D グラフィック プログラマーはゲームの 3D モデラーと並んで作業して戦略やデザイン上の考慮事項を話し合う必要があるかもしれませんが、AI プログラマーはアートスタッフとほとんど、あるいは全くやり取りする必要がありません。アーティストやレベル デザイナーのタスクを手助けするために、プログラマーはツールやユーティリティの開発を自ら申し出たり依頼されたりすることがあります。[1] [2]これらの多くは特定の目的のためのものであり、時間的制約 (このようなツールの開発時間はゲームのスケジュールに含まれていないことが多い) と社内専用であることからバグが多い可能性があります。多くのゲーム ツールは開発を迅速化するためにRAD言語で開発されており、ゲームの完成後に破棄されることもあります。

テスト

プロのゲームテスターに​​よって行われる正式な品質保証テストプロセスは、ゲーム開発のかなり前から開始されます。高予算タイトルは最初のプレイ可能なアルファ版からテストを開始する場合もありますが、低予算ゲームやカジュアルゲームはリリース候補版が完成するまでテストを開始しない場合もあります。プログラマーの役割は、QAチームによって発見されたエラーやバグを修正することです。[3]

完成間近

最後のタスクには、テストの最終段階で発生する可能性のある、軽微なものから重大なものまでさまざまなバグをプログラマーが修正するなど、ゲームを「磨く」作業が含まれます

ゲーム開発者はベータテスト期間を設ける場合がありますが、その定義は開発者によって異なります。多くの場合、ベータ版にはゲームの全機能が含まれていますが、バグや不完全なコンテンツが含まれている場合があります。ゲームサーバーの負荷耐性を測定するためなど、パブリックベータ期間を設けているゲームも少数あります

ゲームが完成とみなされると、「ゴールドマスター」とみなされ、パブリッシャーに発送されます。状況に応じて、パブリッシャーは独自の品質保証プロセスを実施するか、ゴールドマスターからゲームのプレスを開始する場合があります。

メンテナンス

ゲームが出荷されると、ビデオゲームのメンテナンスフェーズが始まります。プログラマーは、できるだけ多くのバグレポートを集めるために一定期間待機します。開発者が十分なフィードバックを得たと判断したら、プログラマーはパッチの開発に着手します。パッチの開発には数週間から数ヶ月かかる場合もありますが、ゲームのほとんどのバグや問題を修正することを目的としています。場合によっては、パッチに追加機能やコンテンツが含まれていたり、ゲームプレイが変更されたりすることもあります。

間隔

現代のゲームの多くは完成までに1年から3年かかります。開発期間は様々な要因によって異なりますが、ゲームデザインのごく初期段階を除く開発の全段階でプログラミングが必要となります。

ツール

他のソフトウェアと同様に、ゲーム開発プログラムはコンパイラによってソースコードから実際のプログラム(実行ファイル)へと生成されます。ソースコードはほとんどどのテキストエディタでも開発できますが、多くのプロのゲームプログラマーは完全な統合開発環境(IDE)を使用しています。繰り返しになりますが、どのIDEを使用するかはターゲットプラットフォームによって異なります。

多くのゲーム開発会社は、IDEに加えて、社内で使用するために開発されたカスタムツールも作成しています。こうしたツールには、プロトタイプやアセット変換ツール(例えば、アートワークをゲームのカスタムフォーマットに変換するプログラム)などがあります。レベルエディタなど、一部のカスタムツールはゲームに同梱されている場合もあります

ゲーム開発会社は、プログラマーに最高のツールを装備させるために、何千ドルも費やすことを厭わないことがよくあります。十分な装備を備えたプログラマーは、2~3台の開発システムと複数のモニターをオフィスや個室に備え付けていることもあります。

プログラミング言語

言語特徴
組み立て潜在的に最小限のCPUオーバーヘッド
C広く知られ、広く移植可能、多数のAPIがあり、マシンコードにコンパイルされます
C++オブジェクト指向、広く知られ、多数のAPI、マシンコードにコンパイル
ジャワオブジェクト指向、ガベージコレクション、広範囲に移植可能(仮想マシン経由)
C#Visual Basic .NETなどオブジェクト指向、ガベージコレクション、Microsoft製品 とのインターフェース
Objective-CSwiftオブジェクト指向、Apple製品 とのインターフェース
LuaPythonJavaScriptTclなど。使い慣れた構文で、上記の言語に簡単に組み込むことができ、スクリプトでよく使用されます。
LispPascalPerlSmalltalkなど。マイナーなゲーム言語だが、人気のライブラリへのバインディングは一般的である

ゲームの初期設計が合意に達したら、開発言語を決定する必要があります。選択は、プログラミングスタッフの言語習熟度、ターゲットプラットフォーム、実行速度の要件、使用するゲームエンジンAPIライブラリの言語など、多くの要因に依存します。

パーソナルコンピュータの場合、言語の選択は好みの問題に過ぎない。SDLAllegroなどの人気ライブラリの言語バインディングは普及しており[ 4 ] [5] 、現代のコンパイル言語で書かれた慣用的なコードとのパフォーマンスの差はごくわずかである。[6] [7]最も人気のある言語は通常、手続き型またはオブジェクト指向であり、コンパイラを介して実装される。たとえば、C[8] C++[8] [9] Java [10]などである。ただし、開発者は、オペレーティングシステムとのインターフェイスや、オンラインビデオゲームのリバースエンジニアリングに対する耐性など、ドメイン固有の機能を考慮する場合がある。 [11]多くのゲームは1つの言語のみで書かれているわけではなく、2つ以上の言語が組み合わされていることがある。たとえば、人気のゲームエンジンであるUnityには、C、C++、C#で書かれたさまざまな部分がある。[12]

コンソールの場合、対象プラットフォームのサポートは通常、最も考慮される要素です。過去には、ストレージと処理速度の両方の点でリソースが限られていたため、コンソール向けのビデオゲームはほぼすべてアセンブリ言語で書かれていました。 [13]しかし、技術の進歩に伴い、コンソールでのゲーム開発の選択肢も増えてきました。任天堂[14] マイクロソフトソニー[15]は、それぞれWii UNintendo SwitchXbox OnePlayStation 4向けにそれぞれ異なるSDKを提供しています。

高水準 スクリプト言語は、コンパイル型プログラミング言語で記述されたゲームへの組み込み拡張機能として、ますます利用されるようになっています。これは、オリジナルの開発者とゲームを改造したい人の両方にとって利便性が高いためです。Lua、APIがANSI Cで記述され、他のアプリケーションに組み込むように設計されているため、非常に人気のある選択肢です。[9] [16]多くの開発者が、 id SoftwareQuakeCEpic GamesUnrealScriptなど、ゲーム専用のカスタム言語を作成しています

APIとライブラリ

ゲームプログラミングにおいて重要な決定は、APIライブラリを使用する場合、どのAPIやライブラリを使用するかです。現在、ゲームプログラミングの主要なタスクを処理するライブラリは数多く存在します。サウンド処理、入力、グラフィックレンダリングを処理できるライブラリもあれば、経路探索などのAIタスクを処理できるライブラリもあります。ゲームプログラミングのほとんどのタスクを処理し、ゲームロジックのコーディングのみで済むゲームエンジンさえ存在します。

どのAPIとライブラリを選択するかは、ターゲットプラットフォームによって大きく異なります。例えば、PlayStation 2開発用のライブラリはMicrosoft Windowsでは利用できない可能性があり、その逆も同様です。しかし、クロスプラットフォーム開発を可能にする、あるいは容易にするゲームフレームワークが存在するため、プログラマーは単一の言語でゲームをプログラミングし、 Wii、PlayStation 3、Xbox 360PSP、Microsoft Windowsなど、複数のプラットフォームでゲームを実行できます。

グラフィックAPI

オペレーティング システム間のグラフィックス API の使用状況:
OSヴルカンダイレクトXGNMX金属
ウィンドウズ10はいはいいいえいいえ
マックモルテンVKいいえいいえはい
リナックスはいいいえいいえいいえ
アンドロイドはいはいはいいいえ
iOSモルテンVKはいはいはい
タイゼン開発中いいえいいえいいえ
バショウカジキ開発中いいえいいえいいえ
Xbox Oneいいえはいいいえいいえ
オルビスOS(PS4)いいえいいえはいいいえ
ニンテンドースイッチはいいいえいいえいいえ

今日、グラフィックスはほとんどのゲームにおいて重要な要素となっています。1990年代半ばまでは2Dグラフィックスが主流でしたが、現在ではAAAタイトルのほとんどがフル3Dグラフィックスを誇り、 Civilization IIIのように本質的に2Dであるゲームでさえも3Dグラフィックスを採用しています。しかし、純粋な2Dグラフィックスは、インディーゲームにおいてルネサンス期を迎えています[17]

パーソナルコンピュータのプラットフォームとして定着しているのがMicrosoft Windowsです。販売されているPCのほぼ90%にプリインストールされているため、現在では最大のユーザーベースを誇っています。[要出典] Microsoft Windowsで最も人気のある2つの3DグラフィックAPIは、Direct3DOpenGLです。それぞれのAPIの利点と弱点は、Windowsゲームプログラマーの間で激しい議論の的となっています。

現在、最も人気のあるコンピューティングプラットフォームはGoogle Androidです。販売されているスマートフォンの約80%にプリインストールされているため、Androidは世界で2番目に大きなユーザーベースを誇り、その数は増加傾向にあります。AndroidはOpenGL ESVulkan(API)を使用しています。

DirectX はゲーム API のコレクションです。Direct3DDirectX の 3D API です。Direct3D は、他のDirectX APIと同様に、 Microsoftから無料で入手できます。Microsoft はゲーム プログラマー向けにDirectXを開発し、API に機能を追加し続けています。DirectX の仕様は公開された調停委員会によって管理されておらず、Microsoft は自由に機能を追加、削除、変更できます。Direct3D は移植性がなく、Microsoft Windows専用に設計されており、他のプラットフォームには対応していません (ただし、Microsoft のXbox 、Windows Phone 7.5 スマートフォン、 Pocket PCオペレーティング システムで稼働するモバイル デバイスでは、Direct3D の形式が使用されています)。

OpenGLは移植可能なAPI仕様です。OpenGLで記述されたコードは、互換性のある実装を持つプラットフォーム間で簡単に移植できます。たとえば、 OpenGLを使用するQuake IIは、ゲームのファンによってWindowsからLinuxに移植されました。OpenGLは、OpenGL Architecture Review Board (ARB)が管理する標準です。ARBは定期的に会合を開き、最新の3Dハードウェア機能に対する新しいサポートを追加することで、標準を更新しています。さらに、一部のビデオゲームコンソール(ニンテンドーゲームキューブ、ニンテンドーDS、PSPなど)のメーカーが提供する開発ツールは、OpenGLに似たグラフィックAPIを使用しています。OpenGLは、常設の開発チームが存在せず、標準が公開されてから実装の開発を開始する必要があるため、機能の更新が遅れることがよくあります。OpenGLを使用することを選択したプログラマーは、一部のハードウェアの最新の3D機能にアクセスできますが、標準化されていない拡張機能を介してのみアクセスできます。この問題に対処するために、OpenGLアーキテクチャレビューボード(ARB)が仕様の管理をクロノスグループに委譲したため、状況は今後変わる可能性があります。 [18]

その他のAPI

Microsoft Windows上での開発では、入力、サウンドエフェクト、音楽、ネットワーク、ビデオ再生などにDirectXの様々なAPIが利用できます。これらのタスクを実行するための商用ライブラリは数多くありますが、DirectXは無料で利用できるため、最も広く利用されています。

コンソールプログラミングに関しては、コンソールメーカーがグラフィックスレンダリングなどのゲーム開発に必要な機能を提供しています。また、コンソールメーカーは包括的な開発システムも提供しており、これらがなければ、そのシステム向けのゲームを合法的に販売したり開発したりすることはできません。サードパーティの開発者は、これらのタスクの開発を容易にしたり、クロスプラットフォーム開発機能などの特別なメリットを提供したりするツールキットやライブラリも販売しています。

ゲーム構造

プログラミングの観点から見ると、あらゆるゲームの中心となる要素はゲームループです。ゲームループにより、ユーザーの入力の有無に関わらず、ゲームがスムーズに実行されます。

従来のソフトウェアプログラムのほとんどは、ユーザー入力に応答し、入力がなければ何もしません。例えば、ワードプロセッサは、ユーザーが入力した単語やテキストをフォーマットします。ユーザーが何も入力しない場合は、ワードプロセッサは何もしません。一部の機能は完了までに長い時間がかかる場合もありますが、いずれもユーザーがプログラムに何かを指示することで実行されます。

一方、ゲームはユーザーの入力に関係なく動作を継続する必要があります。ゲームループはこれを可能にします。ゲームループを非常に簡略化した擬似コードで表すと、次のようになります。

while(ユーザーは終了しません) ユーザー入力を確認する AIを実行する 敵を動かす 衝突を解決する グラフィックを描く 音を再生する終了しながら

ループはゲーム開発が進むにつれて改良され、修正されることもありますが、ほとんどのゲームはこの基本的な考え方に基づいています。[19]

ゲーム ループは、開発対象のプラットフォームによって異なります。たとえば、DOSや多くのコンソール向けに作成されたゲームは、利用可能な処理リソースを制限なく占有して利用できます。ただし、Microsoft Windows などの最新の PC オペレーティング システム向けのゲームは、プロセス スケジューラの制約内で動作する必要があります。一部の最新ゲームでは複数のスレッドが実行されるため、たとえば、キャラクター AI の計算をゲーム内のスムーズな動きの生成から分離できます。これには、オーバーヘッドが (わずかに) 増加するという欠点がありますが、ハイパースレッディングまたはマルチコアプロセッサおよびマルチプロセッサ プラットフォームでは、ゲームがよりスムーズかつ効率的に実行される可能性があります。コンピュータ業界は、より多くのスレッドを実行できるコア数の多いCPUに重点を置いているため、これはますます重要になっています。Xbox 360PlayStation 3などのコンソールでは、すでにプロセッサごとに複数のコアがあり、コアごとに複数のスレッドを実行しています。

趣味人

趣味人がプログラミングに広く利用できる唯一のプラットフォームは、Android、iOS、Windows、Mac、Linuxなどのコンシューマー向けオペレーティングシステムです。これは、ゲームコンソールの開発には数千ドルかかる特別な開発システムが必要になるためです。多くの場合、これらはコンソール製造元から入手する必要があり、プロのゲーム開発スタジオにのみ販売またはリースされます。ただし、マイクロソフトはかつて、Microsoft WindowsとXbox 360の両方で実行されるゲーム開発フレームワークであるXNAを配布していました。XNAは廃止されましたが、MonoGameやSharpDXなどの他のプロジェクトが、ゲームコーディングに同じアクセスを提供しようとしています。最近では、Androidはモバイル開発者に選ばれる最も人気のある趣味用プラットフォームです。[20]一部の趣味人は、特にハンドヘルドシステムや改造コンソール用の自家製ゲームを開発しています。

ソフトウェア エンジニアリングの学生の中には、プログラミング言語オペレーティング システムを学習するための練習としてゲームをプログラミングする人もいます

趣味人の中には、Adobe AnimateUnityAndroid StudiopygameAdventure Game StudioRoblox StudioGameMaker StudioGodotUnreal EnginePixel Game Maker MVConstructなど、ゲーム開発に役立つソフトウェア パッケージを使用する人もいます。


参照

参考文献

  1. ^ Bouknight, W. Jack (1970年9月). 「3次元ハーフトーンコンピュータグラフィックスプレゼンテーション生成手順」Communications of the ACM . 13 (9): 527– 536. doi : 10.1145/362736.362739 . ISSN  0001-0782. S2CID  15941472.
  2. ^ ミリントン、イアン (2019-03-18). ゲームのためのAI. doi :10.1201/9781351053303. ISBN 9781351053303. S2CID  186504701。
  3. ^ Schubotz, Moritz (2016年12月12日). 「Cogex: 質問応答のための論理証明器」. Datasakura .
  4. ^ 「SDL言語バインディング」 。 2015年11月8日閲覧
  5. ^ 「Allegro - 言語バインディング」 。 2015年11月8日閲覧
  6. ^ Corlan, Alexandru-Dan (2003). 「プログラミング言語ベンチマーク」 . 2015年11月8日閲覧
  7. ^ Corlan, Alexandru-Dan (2011年6月11日). 「プログラミング言語ベンチマーク」 . 2015年11月8日閲覧
  8. ^ ab Corlan, Alexandru-Dan (2011). 「CとC++によるゲームプログラミング」 . 2015年11月8日閲覧
  9. ^ ab DeLoura, Mark (2009年3月5日). 「エンジン調査:全般的な結果」 . 2015年11月8日閲覧
  10. ^ Corlan, Alexandru-Dan. 「LWJGL - プロジェクト」。2015年11月10日時点のオリジナルよりアーカイブ2015年11月8日閲覧。
  11. ^ 'No Bugs' Hare (2015年11月30日). 「『MMOGの開発と展開』第V章(b)」
  12. ^ Corlan, Alexandru (2011). 「CとC++によるゲームプログラミング」. Datasakura .
  13. ^ Hyde, Randy (1985). 6502アセンブリ言語の使用.
  14. ^ Helgason, David (2012年11月2日). 「ゲーム開発者よ、Unity 3Dエンジンを使い始めよう」GamesBeat (インタビュー). Dean Takahashiによるインタビュー. VentureBeat . 2014年7月13日閲覧
  15. ^ 「[Phoronix] SonyがPlayStation 4でLLVM/Clangを使用する理由」Phoronix.com . 2014年11月17日閲覧
  16. ^ Corlan, Alexandru-Dan (2015年3月24日). 「Lua: Uses」. 2019年7月24日時点のオリジナルよりアーカイブ2015年11月8日閲覧。
  17. ^ 「なぜほとんどのインディーゲームは3Dではなく2Dなのか?」Rampant Games. 2013年5月16日. 2017年1月1日閲覧
  18. ^ 「Khronos、OpenGLおよびOpenGL ESの適合性テストをオープンソース化」Khronos Groupプレスリリース。2008年5月3日時点のオリジナルよりアーカイブ。
  19. ^ Stutz, Michael (2001). 『Linuxゲームのプログラミング』第1章. Linux Journal Press. ISBN 1-886411-48-4
  20. ^ 「レポート:モバイル開発者の79%がAndroid向けの開発を好む」2016年8月29日。
  • GameDev.net、ゲーム開発の主要リソース
  • 国際ゲーム開発者協会(IGDA)
  • ソフトウェア エンジニア向けのゲーム開発は、受賞歴のある MIT ゲーム ラボのメンターによる指導を受けながら MIT が提供する 5 日間の短期コースです。
  • 元ゲームプログラマーのゲーム開発業界での経験
  • ゲーム業界のベテラン、トム・スローパーのゲームプログラミングに関するアドバイス

ウィキ

  • 2Dゲーム開発ウィキ
  • ゲーム開発ウィキ -GDwiki
Retrieved from "https://en.wikipedia.org/w/index.php?title=Video_game_programming&oldid=1289263222"