ゲームプログラマーは、デザイナーのビジョンを実際に使用するゲームエンジンで実現させる人物です。私はKwaleeのモバイルゲームプログラミングチームで働いていますので、私たちにとっては主にUnityです。例えば、デザイナーが特定の方法でサイコロを転がすことを望む場合、私はそのロジックを処理するスクリプトを作成します。私たちはゲームアーティストと協力して、ゲームが素晴らしく見えるだけでなく、デバイスでの優れたパフォーマンスも実現できるようにします。
このブログでは、【Kwaleeで5年間働いた経験】(https://www.kwalee.com/join-us)を活かして、ゲームプログラマーであることについての重要な洞察と助言を共有します。使用している言語、ツール、原則、私のキャリアアドバイス、初心者および上級者向けのヒントを紹介します。
ゲームプログラマーは何をするのですか?
私たちはコードを書いてゲームを実現します。ゲームデザイナーがコンセプトを作成し、ゲームアーティストがアセットを作成する一方で、プログラマーは機能的でプレイ可能な体験を作り出します。ゲームのパフォーマンスを作り、最適化し、問題が特定された場合はトラブルシューティングを行います。
私たちはゲームが素晴らしく感じられ、高性能で動作することを保証します。これを行うには、コード自体がクリーンで拡張可能であることを保証しなければなりませんが、これは思った以上に難しいです。コーディング標準を使用して、すべてのチームで一貫した品質を維持しますが、必ずしもすべてがスムーズにいくわけではなく、時にはプラグラムを期限内に完了するために枠を超えて考える必要があります。
私たちの責任には、エンドユーザーハードウェアでゲームがうまく動作することを確認することも含まれます。例えば、モバイルゲームでは、古いデバイスが過熱しないように、アーティストと協力してドローコール数を最適化する必要があります。ドローコールは、中央処理装置(CPU)からグラフィックス処理装置(GPU)にオブジェクトを画面に描画するためのコマンドを送信するものであり、GPUにテクスチャ、メッシュ、シェーダーなどのグラフィカル要素を描画するように指示します。これらのドローコールの数を減らす必要があります。これは主にモバイルで特に重要です。市場には、さまざまな技術仕様を持つ多くのデバイスがあります。
主なゲームプログラミング言語は何ですか?
日々のゲームプログラマーとして私たちの多くの時間は、さまざまなプログラミング言語でのスクリプティングに費やされています。最終的にはソフトウェア開発者ですから。選べる言語は数多くあります。いくつかは他より簡単に見えるかもしれませんが、一つの言語を学びマスターすれば、他の言語も学ぶことができます。最大の課題は、その扉を開くことです。
以下は、最も人気のあるゲームプログラミング言語のいくつかの紹介です:
- C# - 汎用性があり、ゲーム開発で広く使用されている人気のプログラミング言語です。初心者には非常に覚えやすいものの一つです。その最も優れた機能の一つは、自動ガベージコレクションです - メモリ割り当てを自動的に管理してくれます - 私たちのような多忙なプログラマーにとって非常に便利です。
- C++ - 対照的に、これは管理されていない言語で、メモリを手動で割り当て/解放する必要があり、複雑さや難しさが一段階上がります。しかし、それはより速さ、制御、性能を許可します。
- Java - C#のように、Javaは独自のメモリ管理とガベージコレクションを持ち、開発者が詳細に追われずにメモリを管理するのを容易にします。Web開発やエンタープライズアプリケーションで広く使用されています。ゲーム開発のための最適な選択とは限らないかもしれませんが、スケーラブルで効率的なアプリケーションを作成するための堅実なオプションです。
- Swift - これはiOSおよびmacOS用のアプリおよびゲームを構築するためのAppleのネイティブ言語です。しかし、クロスプラットフォーム開発にはあまり役立ちません。私たちは常にモバイルゲームをAndroidとiOSの両方に公開することを目指しています。
どのようにしてゲームプログラマーになるのですか?
ゲームプログラマーになるにはさまざまな方法があります。私の道は非常に普通で、Staffordshire大学でゲームデザインとプログラミングを専攻しました。最初はゲームアートに進むと思っていました - 幼い頃から芸術に非常に情熱を持っており、大学のアートモジュールも非常に楽しんでいましたが、そこでゲームプレイを作成することが本当に楽しいことを発見しました。高解像度モデルを作成するのに数日かかるかもしれませんが、アヒルを飛ばして爆発させることができれば、その半分の時間です。迅速にプロトタイプを見ることができるのは非常に重要です。
しかし、ゲームをプログラムするということの美しさは、伝統的なルートを経ずとも多くの人にアクセス可能であることです。私は大学で50歳以上の友達がいました - 何か新しいものを体験するのに決して遅くはありません。Kwaleeでも、主にYouTubeビデオを通じて学び、その楽しみのためにゲームを作った人を雇いました。今日では、新しい才能にとって非常に多くの機会があります。新しい学生のポートフォリオを見てみると、彼らはそれに多くのものを持っています。素晴らしい才能が出てきており、業界では非常にエキサイティングな時期です。
おそらく聞きたい質問:AIはプログラミングのキャリアに影響を与えるでしょうか?それは非常に役立ち、どんどん改善されています。問題に行き詰ったときや何かの説明が必要なときに最適です。最新のChatGPTにコードを貼り付けてバグをトラブルシューティングしたり、コードをリファクタリング(「清掃」する)することができます。しかし、ポートフォリオを見るときには、やって誇りに思う作品を見たいと思っています。AIを使用するのは大丈夫ですが、自分のスキルの代わりとして使用しないようにしてください。
ゲームプログラマーの一日とは?
私の生活を例に挙げてみましょう。私はリードプログラマーです(夢の仕事と呼んでいます)、これは実践的な作業と他のプログラマーの管理の素晴らしい組み合わせです!
私の世界での典型的な一日は、入ってきてラテを買い、QAチームのバグや妨害要因を二重確認することです。チームに連絡して、彼らの仕事を妨害している何かを手伝う必要があるかどうかを確認します。その後、音楽をオンし、タスクリストを表示します。進捗ビデオをSlackで共有して迅速なフィードバックを得たり、チームメンバーをサポートするために2〜3のプロジェクト間を行き来します。また、プログラミングの効率を高めるための共有システムに多くの時間を投資しています - すべてをスムーズに動作させるために定期的にメンテナンス、アップデート、修正する必要があります。
初心者向けゲームプログラミングのヒント
完全なプログラマーを目指して始めようとしている場合、こちらが私の初心者向けのヒントです!
- オンラインで学ぶべきことがたくさんあり、YouTubeでも多くの例えゲームがあり、学ばない理由はありません!人気のあるエンジンは無料で、利用するのが非常に楽しいです!
- スペクトルの反対側には、30年経っても影響力のある「Design Patterns: Elements of Reusable Object-Oriented Software」という本を読んでみてください。いわゆるGang of Four著者によるもので、日常的にプログラムに使用されるゲームパターンの基礎を紹介しました。
- 自分のアイデアがあるかもしれませんが、シンプルに始めて基本を身につけることを忘れないでください。
- 商業プロジェクトに縛られていない場合、好きなだけコードを書くことができるので、驚異的なものを創造する楽しみを持ちましょう。
- ポートフォリオを作成することが非常に重要です(これが私の仕事の取得方法です)。しかし、ただのユニワークをアップロードするだけではありません。そのままの日々や日々を追加して、他の多くのアプリケーションと差をつけましょう。
- 自分の実際のゲームを作成するのも賢明です - Google Playでゲームを公開するのは非常に安価であり、電話でリクルーター、出版社、家族、ペットに見せることができます。それまで独自のフルタイムの資格を得るまで、年に数千ドル稼ぐかもしれません。それは素晴らしいボーナスです!それとも自分の完全なゲームを作り、出版社とパートナーを組むことを誘惑するかもしれません。
- プログラミングについてだけでなく、アート、デザイン、QA、およびインタラクションする他の分野についても学びましょう。例えば、QAメソッドを理解すると価値があります。何かがうまくいくと仮定してしまう罠にはまることができますが、あなたの期待通りに「プレイするべきだ」と定義されたビジョンを持ち、コードを書いた人としてではなく、ユーザーとしてそれをプレイする必要があります。破壊的になり、人々が行うかもしれないランダムなことを試して、ランダムなボタンを押すなどの奇妙な行動を試みてください。
上級プログラマーのヒント
ここでは、私がジュニアからプログラマー、シニアからリードに進化するのに役立ったヒントのいくつかを紹介します。
- 常にさらに学ぶことができ、間違いなくミスがなければ学べません!
- 何か本当に情熱を持っている場合、より専門化することができます。たとえば、シェーダーやレンダーパイプラインを利用することが好きな場合、グラフィックシェーダーを使用して複雑な視覚効果をレンダリングする能力を広げ、レンダーパイプラインを使用してパフォーマンスを最適化したり、素晴らしい効果を作成する方法を学びましょう。
- 本当にクールなものを作ることができ、契約が許せばそれをアセットストアにアップロードして見せびらかせることができます。特定のタイプのプログラマー、たとえばゲームプレイプログラマー、サーバープログラマー、グラフィックスプログラマー、マルチプレイヤープログラマーとしての専門分野を開発することができます。
- あるいは、私のようにマネジメントルートに進んで、人々を指導することもできます。私がキャリアを進展させるための戦略は、新しい責任を吸収することでした。最初に、小さなことを改善し始めました。すなわち、小さなワークフローチェンジなどを行いました。それから、テンプレートを使用して新しいプロジェクトを作成するときに時間を節約することでプロセスを簡単にしました。それから、メンタリングと管理に魅了され、そこから自信をつけていき、現在はピアレビュー、コードレビュー、ワークショップのホスト、プロジェクトのチームリーディングに参加しています。
チームの一員として働く場合でも、マネージャーとして働く場合でも、建設的な批判と同様に賞賛を与えることが重要です。コードをレビューするときには、人々を盛り立てましょう!
ゲームプログラミングの基本的な原則は何ですか?
ゲームプログラミングをカバーするブログに含めなければならない重要なトピックがあります。これらは以下に示す最も重要な内容です。
ソースコントロール/バージョンコントロール
ゲームにセーブポイントがあるのと同様に、プロジェクト開発にもセーブポイントがあります。これらはプロジェクトの一般的なストレージとして機能し、3〜4人のプログラマーが同時にシステムに取り組み、変更を作成してサーバーにプッシュできます。これにより、これらの変更を追跡し、何かが壊れた場合に簡単にロールバックできます。2人の開発者が同じファイルに取り組んでいる場合、そのファイルはマージの一部となり、衝突が発生した場合には手動で解決したり、特定の個人の変更を適用したりできます。Unity内のプレハブやシーンを使用するときにこれは頻繁に発生します。
これらの用語は時には重なることがありますが、一般的にソース管理はコードに焦点を当て、バージョン管理はすべてのプロジェクトファイル、アセット、ドキュメントを含みます。
最初にソースコントロールを使用し始めるとき、それは少し怖いかもしれません。非常に圧倒されるかもしれず、衝突が発生するときに何をすればいいかわからないかもしれません。しかし、バージョンコントロールの本質は時間の瞬間を保存することに役立ちます。頻繁に更新し、詳細なコミットメッセージを使用すれば、それは非常に便利で安全になります。複数のポイントに戻ったり、複数のブランチを持ったりできます。開発者のセーフティネットと考えてください。Pixarのトイ・ストーリー2のバージョンを避けるために - 誤って削除され、技術的ディレクターの家庭のハードドライブから回復されましたが、代わりにすべてがサーバーに安全にあります。
オブジェクト指向プログラミング
これはKwaleeで主に使用しているプログラミングタイプです。実際のものや抽象的な概念を表すためにオブジェクトを使用し、コードベースを現実世界での物体とのやり取りを反映させる原則を使用して整理しようとします。これにより、再利用可能で拡張性があり、より容易に保守可能なクラスにコードを整理することで複雑なシステムを維持することができます。
もちろん、それが良いかどうかについての議論があります。最高のパフォーマーではありませんが、うまく機能します。言語ごとに利点と短所があり、最初に一つのものを学び、言語とコンパイラー(人間のコードを機械コードに変換するトランスレーター)の働きを理解することが出発点です。他のタイプも検討できます。たとえば、数学に近い関数型プログラミング、事実とルールを使用した論理プログラミング、ステップバイステップなデータを使用した手続き型プログラミングがあります。
プログラミングパターン
これらは素晴らしく役立つものであり、ソフトウェアデザインで直面する一般的な問題に対する再利用可能な解決策です。問題を解決するためのテンプレートを提供し、毎回車輪を再発明する必要がなく、実証済みのソリューションをフォローできるようになります。
例えば、シングルトンデザインパターンは、ゲーム全体でクラス(たとえば、ゲーム設定マネージャー)のインスタンスを1つだけ保持し、それにグローバルなアクセスポイントを提供します。このパターンのコードは、設定マネージャークラスの唯一のインスタンスが常に存在するようにし、それを再作成または複製する必要がないようにします。
また、ファクトリーパターンがあり、より整理された柔軟な方法でオブジェクトを作成するのに役立ちます。特定のタイプのオブジェクト(キャラクターやアイテムなど)を生成するためのメソッドを定義し、入力パラメーターに基づいて、同様のタイプのオブジェクトを簡単に作成できるようにします。
このブログがゲームプログラミングの興味、または経験豊富なプログラマーに対して何らかの刺激を与えられることを願っています!もしもあなたが働き者でありながらも楽しい人物であれば、我々のチームにピッタリですので、Kwaleeのキャリアについてもっと知ることができます。それ以外にも、モバイルゲームまたは出版について学び、開発者とパブリッシャーとして私たちがリリースするものをもっと知ることができます。








