それで、あなたはゲーム開発に携わりたいと考えています。または、より具体的かつ簡単に言うと、技術的な側面に携わるゲーム開発者になりたいと考えています。そうですね、誰でもその方法について疑問を持つでしょう。
例えば:
これらのトピックに関する情報は大量にありますが、その情報が多すぎると簡単に脳に負荷がかかり、価値のある選択をすることが難しくなります。
私の名前は Andrey Mikheev です。Pixonic、MY.GAMES のシニア バックエンド開発者です。私はゲーム業界に20年間携わっています。私が初めてゲームを作ったのは 90 年代で、当時人気のあった ZX Spectrum でした。この記事では、ゲーム開発に切り替えるときに選択できるオプションを明らかにし、これらのオプションがどのように異なるかを説明します。
この記事では、読者が業界への旅を始めたばかりであるという前提に基づいて説明します。すべてを同時に学ぶことは不可能なので、優先順位を付けて学習を進める方法を選択する必要があります。もちろん、人それぞれに異なる経験があります。この職業で成長するための道は複数あります。
ゲーム開発 (および他の多くの IT 分野) の利点は、自分のスキルを適用できる分野が数多くあることです。プロデューサー、マーケティング担当者、アーティスト、デザイナー、脚本家、モデラー、アナリスト、クライアント側開発者などになれる可能性があります。コア開発者、メタサービス開発者、レンダー開発者など。実際のところ、インディー ゲームの世界では、前述したほぼすべてのスキルを組み合わせる必要がありますが、これについてはまた別の機会にお話しします。
ゲーム開発でキャリアを始めようと考えるとき、多くの場合、習得すべきエンジン、最初に選択するプログラミング言語、取り組むべき特定のスキルなど、技術的な側面に焦点が当てられます。
ただし、テクノロジーは単なるツールであることに留意してください。開発者としてのアイデンティティ全体を特定のものに基づいて構築する必要はありません。整備士はレンチではありません。今日はプラスドライバー、明日は電動ドライバー、明後日は空圧工具です。目標は、特定のドライバーの使い方を学ぶことではなく、車の構造と組み立てと修理の方法を理解することです。
これらのレンチをゲーム エンジン、コーディング言語、その他のものに置き換えても、ポイントは変わりません。これらはあなたが利用するための単なるツールです
したがって、私の意見では、この段階では一般的なスキルが最も重要です。なぜなら、あなたには「ゲーム」を作成するというタスクが課せられているのではなく、優れたコードを書くことが課せられているからです。
目標は10億ドルのヒットゲームを作ることではなく、開発者として成長することです。いずれにしても、10 億ドルのゲームを作るのは開発というよりも、アイデアとマーケティングが重要です。コードは二次的なものです。もちろん、これら 2 つの目標は互いに矛盾するものではありませんが、私は驚異的な成功を最初の目標に設定しません。そうすれば、すぐに企業全体に失望する可能性があります。
コードの話に戻りますが、コードに全体的に焦点を当てることが重要です。なぜなら、高品質のコードはどの業界でも常に大きな需要があり、これにはゲーム、フィンテック、ロボット制御アルゴリズム、宇宙へのロケットの打ち上げなど、多くの用途があるからです。高品質のコードは大幅な遅延を意味し、このビジネスでは時間が重要であると言う人もいるかもしれません。信じないでください。適切なコードを書くことができれば、ダウンタイムは発生しません。
また、コードが雑な場合、高品質な製品を作成するには癖を修正する必要があり、それには多くの時間と労力がかかります。
もう 1 つの非常に重要な点はタイミングに関するものです。良いコードの作成に費やした時間は、そのメンテナンスに費やす時間の削減によって常に相殺されます。結局のところ、ゲーム、特にマルチプレイヤーは長寿命の製品であり、この場合、コードの品質が非常に重要です。
他の専門家はコードを簡単に理解し、コードを書き直すことなく適応できる必要があります。また、数年後に突然何かを変更することを決めた場合にも、簡単に読むことができるはずです。大まかな例として、1 週間で理解できないものを書いて、マイナーごとに 1 か月かかるよりも、高品質のコードを一度書いて数か月かけてすぐに変更できるようにする方が良いです。今後編集します。
一言で言えば、クリーンなコード、クリーンなアーキテクチャ、ECS、SOLID、KISS、OOP、アルゴリズムとデータ構造 - ゲーム開発分野で優れた技術スペシャリストになりたい場合は、これらすべてのトピックに特別な注意を払う必要があります。
はい、アルゴリズムによって頭痛が起こる人もいるかもしれません。しかし、ゲーム開発にはこれらの「アルゴリズムと構造」が通常の Web プロジェクトよりもたくさんあり、それらをマスターすれば作業が大幅に簡素化されます。
これらの概念をより深く理解するには、当然のことながら、経験を積む必要があります。時間が経つにつれて、さまざまなプロジェクトに参加するようになり、他のスペシャリストがどのように仕事をしているかを理解し始め、ゲーム コードを扱うときに個人的に何が問題になっているのかがわかるようになります。
他の人の経験から学ぶことは非常に重要です。オープンソース プロジェクトを研究し、業界の専門家による講義を聞いてください。現在、入手可能な情報ソースがたくさんあることを思い出してください。しかし、やってはいけないのは、特にチームに優れた指導者がいない場合、プロジェクトの本質を煮込むことです。有能な開発者は孤立した状態で作業することはできません。ここで重要なことは、やりすぎて、何をしているのか、なぜしているのかを理解せずに他のプロジェクトのコードを使い始めないことです。
そして、もう 1 つ重要な点があります。コードを書き換えるのは正常なことなので、恐れる必要はありません。さらに、トレーニング期間中、これは非常に重要です。優れたプラクティスを使用することでコードがどのように改善され、より保守しやすくなるかがわかります。
一般的なプログラミング スキルを向上させるプロセスは、すぐには進みません。それには数か月、場合によっては数年かかる場合もあります。それなしではやっていけないので、準備をしてください。
良いスタジオでインターンシップを得る機会があれば、あなたの成長は大幅に加速します。ゲーム開発のさまざまな側面を学び、メンターから質問への回答を得る機会があります。しかし、正直に言うと、これは最も一般的な方法ではありません。
ゲーム業界で最初の仕事をゼロから探すのはまた別の挑戦です。有名なパラドックス: 仕事を得るには経験が必要であり、経験を得るには仕事が必要です。この場合、独学を検討する価値があります。有料コースという考えはすぐに捨てましょう。さまざまな理由から、有料コースはすべての人に適しているわけではありません。幸いなことに、インターネット上には、ゲーム コーディングのあらゆる側面に関する何十、何百ものガイドがあります。
これらの基本的な質問に自分で答え、何をどのように学ぶのかを理解したら、どのゲーム エンジンを使用するかを決定します。これにより、学習する必要があるプログラミング言語も決まります。
このトピックは広すぎるため、1 つの記事で取り上げることはできません。さらに、開発者として、私たちはエンジンよりもプログラミング言語に興味があります。このトピックについてさらに詳しく知りたい場合は、これを読むことをお勧めします
旅の初めに、 Unreal Engine や Unity のような大きくて本格的なエンジンをすぐに選択する必要はありません。理論的または実践的な背景がない場合は、PlayCanvas またはその類似物のような Web ゲーム用のエンジンで十分です。
Defold エンジンも、最初に使用するのに適したオプションです。 Unity よりもシンプルで、2D ゲームに重点を置いています。 Lua という非常にシンプルな言語が使用されており、習得が簡単です。
時間を節約するために、言語のいくつかの側面を簡単に説明し、私が学習するときと同じように優先順位の順に並べます。この順序は、言語の品質や問題点を物語るものではありません。代わりに、それは、言語の複雑さ、関連性、および機能の間のバランスについての私の評価です。
たとえば、Lua は非常に興味深い言語であり、習得が簡単で、Defold エンジンを使用してゲームを作成できます。ただし、開発エクスペリエンスのメイン言語としてそれを選択することはできません。これは、 C++や C# などのより一般的な言語と一緒に使用される補助言語です。
もちろん、これはすべてのプログラミング言語の完全なリストではありません。それらは十数個あります。しかし、これが私があなたに指摘したいことです。したがって、私が学ぶ内容とその順序は次のとおりです。
C#:真剣に、そして長期間にわたって開発に取り組む予定がある場合は、人気のある汎用言語から始めることをお勧めします。 C# もその 1 つです。また、バックアップ プランにも適した言語です。ゲーム開発に突然飽きてしまった場合でも、C# でフィンテックやビジネス アプリケーションなどのさまざまなソフトウェアを作成できます。
C# を使用すると、標準的なプログラミングの概念を理解し、さまざまな開発アプローチを実装できます。 OOP、CQRS、DDD、ECS などの一見恐ろしい略語についてすべて学びます。もちろん、これらのアプローチのほとんどは任意のプログラミング言語で実装できます。しかし、ニュアンスもあります。たとえば、すべての言語に「クラス」の概念があるわけではないため、概念の実装方法も異なります。これは初心者の開発者の心を打ちのめし、モチベーションを損なう問題を含め、多くの不必要な問題を引き起こす可能性があります。したがって、私の意見では、たとえば JavaScript と比較して、C# は開発のキャリアを開始するための最良の (ただし簡単ではない) 選択肢です。
Java : C# と同様、 Java は汎用言語です。しかし、ゲーム開発では、主にサーバーに関連します。もちろん Java ゲーム エンジン (LibGDX など) もありますが、ゲーム開発では Unity などほど人気がありません。
繰り返しになりますが、これらの一般的な言語は、Java の知識はあるものの、たとえばフィンテックの分野で働いていて、突然ゲームを作成することになった場合に適しています。実験のためだけに新しい言語を一から学びたいとは思わないでしょう?
JavaScript : Stack Overflow の創設者の 1 人である Jeff Atwood は次のように述べています。 」
悲しいことですが、この言語で書かれたゲーム プロジェクトが増えているのは事実です。実際、JavaScript は、特に初心者にとっては非常に簡単です。また、ある種の Web エンジンで作業している場合は、コード行をどこに入力するかを指示される可能性もあります。
そのシンプルさにもかかわらず、JavaScript がゲーム開発の旅を始めるのに適した場所であるとは思えません。他の汎用言語とはあまりにも異なるため、開発者を騙す可能性があります。開発者は最初のプログラミング言語の概念に基づいて考えるという考えがあります。これにはある程度の真実があるので、最初はより一般的なテクニックとアプローチを学ぶ方がよいでしょう。しかし、Web ゲームを始めようと思ったら、おそらく JavaScript なしではやっていけないでしょう。ウェブの世界に君臨しています。この場合、TypeScript に注意を払うことをお勧めします。この言語は C# に非常に似ており、将来的には別の言語に簡単に切り替えることができます。
Lua/Python:なぜそれらをまとめたのでしょうか?これらはスクリプト言語であり、通常はゲーム ロジックの個々の部分をスクリプト化するために使用されます。 (はい、これらが主要な開発言語である Defold のようなエンジンがあります。ただし、これらはルールの例外です。) たとえば、 Pythonはインライン スクリプト用の非常に人気のあるツールであり、Blender 3D エディターで使用されます。
Lua と Python を知っていて使用できると便利ですが、前述したように、これらは補助言語なので、後回しにしておきます。もちろん、最初のプロジェクトで Defold エンジンを選択した場合を除き、Lua は不可欠です。
C++ : C++ がリストの一番下にあることに驚いた人もいるかもしれません。それは言語が悪いからではなく、その道が最も困難だからです。これは、提示されている言語の中で最も強力な言語ですが、独自の機能を備えた最も複雑な言語でもあります。
AAA ゲームの作成には C++ が使用されており、ハードウェアを最大限に活用することができます。しかし、初心者の開発者にはこれをお勧めしません。業界に失望する可能性が高くなります。しかし、C++ が本当に必要なものであると本当にわかっていて、それに伴う困難を恐れず、明確な行動計画があるのであれば、先に進んでください。
プログラミング言語を選択することは重要ですが、何よりもまず技術英語をレベルアップする必要があることを忘れないでください。これは、ガイド、コース、その他の貴重な情報源をナビゲートするのに役立ちます
私の意見では、これはゲーム開発者が次に行うべき決断です。 (モバイル ゲームを開発するか、AAA を開発するか、ウェブ ゲームを開発するかのような選択ではありません。) 理由は簡単です。旅の最初の段階では、大規模なゲームを開発するという選択肢はほぼ確実にないからです。考えてみてください。経験がまったくない状態で、どうやって『Escape from Tarkov』や『Call of Duty』のような作品に取り組むことができるでしょうか?最初のゲームは大規模で複雑なものであってはなりません。そうしないと、ゲームを完成させることができません。燃え尽きてゲーム開発から離れるだけです。
自分が何をしたいのかを正確に理解するのは良いことです。経験豊富な開発者にとって、これはそれほど重要ではありませんが、最初は、この質問に対する答えが、可能な研究の道筋を狭めることになります。
シングルプレイヤーとマルチプレイヤーの観点では、クライアント開発 (つまり、プレイヤーが直接操作するゲームの部分) の観点からは、開発者にとっての違いはそれほど大きくない可能性があります。しかし、マルチプレイヤーにはバックエンドとそれに関連するすべての問題が必要であり、これは別個の広大なトピックでもあります。
この点では、シングル プレイヤー ゲームの方が簡単です。他のプレイヤーの世界の状態を同期したり、ゲーム ロジックを分離したり、その他の問題を心配する必要がないからです。
ゲームの仕組みの観点から見ると、シングルプレイヤー ゲームはマルチプレイヤー ゲームよりもはるかにシンプルになる場合もあります。プロジェクトがシンプルであればあるほど、簡単に完了できます。そして、始めたことを最後までやり遂げることは、どんなビジネスにおいても重要なスキルです。
要約すると、シングルプレイヤー ゲームから始めることをお勧めします。そのほうが簡単です。しかし、友達と一緒にプレイできるシンプルなマルチプレイヤー ゲームを本当に作りたいのであれば、そうしてみてはいかがでしょうか?最初の動作バージョンを取得するにはさらに時間がかかることを理解する必要があります。ただし、人間の内部衝動は非常に複雑なものです。おそらく、オンライン ゲームを作成する方が、シングル プレイヤー ゲームよりもはるかにモチベーションが高まり、最初のプロジェクトを完了する可能性が高くなります。
さて、ここで本題ですが、ゲームを作りたい場合は一体どこから始めればよいのでしょうか?
そもそも作りたいゲームの種類がおおよそわかっているとしましょう。私たちは、どのような種類のプログラミング言語が主に使用され、どのようなエンジンで使用されているかを知っています。これは、この言語とエンジンを選択する必要がある段階です。 (C# から始めることをお勧めします。AAA ヒットを作成するには C++ が必要ですが、それは経験を積んだ後で取っておきます。) したがって、言語とエンジンの組み合わせは C# + Unity になる可能性があります。これらは需要があり、素晴らしい選択です。
これは重要な点です。エンジンから始めるのではなく、最初に言語を選択してください。言語がなければ、エンジンを効果的に学ぶことはできません。例やドキュメントを読んでも何も理解できず、混乱するだけです。理想的には、言語をマスターし、自信を持って簡単なプログラムを作成できるようになるまで、ゲーム エンジンの学習を開始しないでください。
プログラミング スキルを向上させるには、次のようなプロジェクトをチェックしてください。
言語に少し慣れたら、いよいよエンジンの勉強を始めることができます。 2023 年には、このトピックに関する情報がたくさん出回っています。インターネットにはリソースが溢れています。何十もの YouTube チャンネルから好きなものを見つけられます。さらに、先ほども述べたように、Unity は非常に人気があるため、資料が不足することはありません。
エンジンの作成者によるあらゆる問題に対する解決策のビデオを見つけることができます (Unity Hub で直接入手でき、最初にインストールします)。
これらは開始するための 3 つの基本的なステップであり、そこから道を続けることができます。おおよその概要を説明しましょう。
選択した言語とエンジンを少し学習したら、簡単なゲームを作成してみてください。どんなゲームでも、三目並べでも。制限なく、すべてを思いどおりに実行してください。コードは自分で記述する必要があります。 (それでも非常に便利なリソースであるStack Overflowからのコピーアンドペーストは避けてください)。主な基準は、ゲームが動作することです。
次に、ゲーム用の新しい機能をいくつか考え出し、追加してみます。たとえば、プラットフォーマーを作成している場合は、ボタンを押したときにレベルの重力を変更する機能を作成してみてください。または、レベルのある部分から別の部分にテレポートする機能。
作業中のドラフトに何か新しいものを追加するのがどれほど簡単か、または難しかったかに注目してください。コードの構造を変更するために必要な量など。その後、ベスト プラクティスを研究し、他の開発者がプロジェクトとコード (OOP、SOLID、KISS) をどのように編成するかを提案しているかを確認し、新しい知識を考慮してゲームを書き直します。
そして、また新しい機能を思いつき、その新しい知識を使ってそれを作成します。コードが改善されると、新しい機能の追加がどのように簡単になるか、または難しくなるか、また、どれだけのバグが見つかるかを考慮してください。
数回の反復を通じて徐々にプロジェクトに複雑さを加え、学んだ教訓に基づいてプロジェクトを書き直します。
手抜きをしないと仮定すると、自分が下した決定がどのように新しい機能の実装に干渉したり、助けになったりするかがわかるでしょう。コードの品質の主な基準の 1 つは、プロジェクトへの変更がいかに簡単であるかです。残念ながら、これに関する明確な法律はありません。すべては経験とともに生まれます。
単純なゲームを作成する気がない場合は、代わりに個々のメカニズムをコーディングすることから始めることもできます。たとえば、いくつかの立方体で構成された基本的な「車」を何らかの面で走行させることから始めて、徐々に他の機構をミックスに追加することができます。
その後、より複雑なゲームを考案し、プロジェクトを改善するために再度数回の反復を行うことができます。興味深い結果が得られたら、最終的にこのゲームをストアでリリースしてみることができます。
経由でリリースを試すことができます
ゲームのリリースに関する小さなライフハックを提供できます: Web/ブラウザ ゲーム。ユーザーが現在主にモバイル デバイス、PC、またはコンソールでプレイしていることを考えると、この形式の人気は失われているように見えますが、Web ゲームにはまだ十分な視聴者が存在するため、デビュー プロジェクトを 1 つとして立ち上げることを試みることができます。これは、モバイル デバイス上でネイティブ ゲームとしてリリースするよりもはるかに簡単です。
モバイル ゲームの競争は熾烈で、宣伝されなければ、あなたのゲームは注目されない可能性が高く、パブリッシャーなしでプロジェクトを宣伝するのは非常に困難です。 Web ゲームの場合は、これらのプロジェクトをホストする特別なポータル ( Armor Games、Newgrounds、WebGames など) があります。そこでリリースするのは非常に簡単で、広告で収入を得ることができます。期待しないでください。しかし、それでも、それが実現すれば、それは嬉しいボーナスです。
さて、少し警告です。最近では、「ノーコード」アプローチが非常に人気があります。コードを記述せずにプロジェクトを作成する場合です。 (「マウスクリックプログラミング」とも呼ばれます)。私のアドバイスは?このアプローチは避けた方がよいでしょう。
これらのノーコード アプローチは、ゲームの仕組みを試したり、単純なプロトタイプを構築したりするのに最適です。しかし、私たちには別の全体的な目標があります。コードなしで単純なゲームを組み立てても、開発者には少しも近づきません。
覚えておいてください。記事を読んだり YouTube ガイドを見たりしても、どれだけ練習に代わることはできません。いくつかの (実際には、1 つではなく複数の) プロジェクトを作成することによってのみ、意味のあることを学ぶことができます。ゲーム開発におけるプログラマーとしての道筋を描くには、単純なものから複雑なものまで、段階的に進むことが重要です。
ゲーム開発に参入し、ゲームのプログラミングを始めることについて、いくつかのアドバイスを提供しようとしました。適切な言語とエンジンの選択、粘り強さと忍耐力、フィードバックの収集、内省、これらはすべて非常に重要です。しかし、このプロセスには無視できないもう 1 つの要素があります。それは楽しむことです。
あなたがゲームに情熱を持っておらず、ゲームをプレイしないのであれば、おそらくこの冒険からは何も生まれません。これは基本的にあらゆるクリエイティブな仕事に当てはまる悲しい真実です。楽しみがなければ、それはただのお金を稼ぐための単なるルーチンになってしまいます。確かに、いずれにしても何年も経てば興味を失うかもしれませんが、うまくいけば、その時までにすでに達成されて、関連する仕事のどちらかを選択できるようになっているか、その時点で何か新しくて興味深いことをするのに十分な収入が得られているはずです。
特に旅の初めに、仕事ばかりで遊びも何もしないと、間違いなく燃え尽き症候群と失望につながります。
したがって、私の最後のアドバイスは、自分を情熱的にさせるもの、つまり昼も夜もプロジェクトに取り組むよう駆り立てるものを探してください(もちろん、これを文字通りに行うべきではありません!)自分の原動力を見つけたら、それは何ですか?そうでなければ、典型的なルーチンであるはずの作業が、興味深く魅力的な挑戦に変わります。これにより、あなたの専門的な成長が確実に加速します。