ゲーム開発の基本用語。ゲームエンジン・アセット・FPSを整理
コインを集める2Dゲームを例に、シーン、コンポーネント、アセット、スプライト、物理演算、FPSを順に整理します。UnityとGodotの呼び方の違い、確認問題も解説します。
ゲームを作りたくて解説を開いたのに、「シーンへプレハブを置いて、コライダーを付けます」で止まってしまう。やりたいことは分かるのに、用語が壁になりますよね。
今回は「小さなキャラクターでコインを集める2Dゲーム」を想像しながら整理します。完成までに出てくる言葉を、素材を用意するところから順番につなげてみましょう。
まずは4つだけ覚えよう
- シーン:ゲームの場面や、オブジェクトを組み合わせたまとまり
- オブジェクト:プレイヤー、コイン、カメラなど
- コンポーネント:オブジェクトへ組み合わせる機能
- アセット:画像や音など、制作に使う素材やデータ
これはUnityを例にした、最初のつかみ方です。ほかのエンジンでは名前も構成も違います。例えばGodotはノードを組み合わせてシーンを作る方式です。
知らないツールへ移ったとき、「前のエンジンと同じ名前がない」と焦らなくて大丈夫。まず同じ役割のものを探します。
ゲームエンジンとは
ゲームエンジンは、画面の描画、入力、音、物理計算、素材管理など、ゲーム制作に使う機能をまとめた土台です。Unity、Unreal Engine、Godotなどがあります。
例えばコインを取る処理を作る場合、エンジンは画像の表示や物体同士の接触を調べる機能を提供します。しかし「何点増やすか」「一度取ったら消えるか」「全部取ったらクリアか」は、制作者が決めます。
エンジンがあれば自動で面白いゲームになるわけではありません。基礎機能を借り、自分は遊びのルールに集中できる、と考えると役割がはっきりします。
制作画面をエディターと呼びます。エディター内で再生することと、ほかの人のPCで動く作品を作ることも別です。最後にビルドやエクスポートが必要になります。
シーン・オブジェクト・コンポーネント
1. 場面を用意する
タイトル画面やステージ1などを、シーンとして整理します。ただし1シーンが必ず1画面という意味ではありません。Godotでは再利用するプレイヤーのまとまりもシーンにできますし、エンジンによって複数シーンを組み合わせる方法もあります。
「シーン=テレビの1カット」とだけ覚えるより、機能や配置をひとまとまりにする単位と考える方が応用しやすいです。
2. 登場するものを置く
ステージにはプレイヤー、地面、コイン、カメラなどを置きます。カメラは、ゲーム世界のどの範囲を画面へ見せるかを決めるものです。
Unityの GameObject は、こうしたものの器となり、機能をコンポーネントとして持ちます。見えない管理用のものもあるので、オブジェクトは必ず画像を持つわけではありません。
エンティティもゲーム内の対象を表す言葉ですが、設計方式によって具体的な意味は変わります。初めは「存在する対象の単位」と読み、使用エンジンの定義へ合わせましょう。
3. 必要な機能を組み合わせる
コインなら、例えば次の担当が必要です。
| 担当 | 仕事 |
|---|---|
| 位置や大きさ | ステージのどこに置くか |
| 見た目 | コインの画像を表示する |
| 判定 | プレイヤーと重なったか調べる |
| ルール | 一度だけ得点を加え、取得済みにする |
| 音 | 取得音を鳴らす |
1つに全部を書くこともできますが、役割を分けると直しやすくなります。「画像は見えるけれど取れない」なら、見た目ではなく判定やルールを調べる、と切り分けられます。
アセット・スプライト・テクスチャの違い
アセットは制作に使うデータの総称です。画像、音、フォント、3Dモデル、アニメーションなどが含まれます。3Dモデルは、立体の形を表すデータです。
テクスチャは、表面の色や模様などに使う画像データです。スプライトは、主に2Dで画面へ表示する画像のまとまりや、その表示単位を指します。ツールで具体的な扱いは違います。
コインのPNGファイルを想像してみましょう。
- ファイルをプロジェクトへ取り込むと、画像アセットとして扱う
- 画像の全部、または一部分を2D表示に使う
- ステージ上へ表示し、位置や回転を変える
元が同じ画像でも、素材としての呼び方と、ゲーム内での使い方の呼び方が違うんですね。
無料の素材にも利用条件がある
ライセンスは、素材やソフトをどんな条件で使えるかを示すものです。無料配布されていても、商用利用、改変、再配布、作者名の表示について条件がある場合があります。
学習中は使えても、公開時に別条件になることがあります。入手元と利用条件を記録し、必要なクレジットを付けます。検索で見つけた画像を、そのまま自分のゲームへ入れてよいとは限りません。
プレハブとは
Unityのプレハブは、設定したGameObjectとその構成を、再利用できるアセットとして保存する仕組みです。
コインを20個置くたびに、画像・判定・得点処理を20回設定するのは大変ですよね。そこで、設定済みコインを元にして複数の実体を作ります。その実体をインスタンスと呼びます。
- プレハブ:共通の設定を持つ元
- インスタンス:ステージへ置いた個々のコイン
共通設定を直すと、関係するインスタンスへ反映しやすくなります。ただし、個別に上書きした値などは別扱いになるため、すべての変更が無条件に全部へ反映されるとは限りません。
Godotならシーンを再利用してインスタンスを作るなど、似た目的を別の仕組みで実現します。プレハブという言葉を全エンジン共通の正式名とは思わないようにします。
物理演算と当たり判定
当たり判定は、物体同士が重なる・触れるなどを調べる処理です。コライダーは、その判定へ使う形や機能です。
画像の透明な余白まで判定へ入れると、「まだ触れていないのに当たる」ことがあります。そこで見た目とは別に、単純な四角形や円の判定枠を使います。
物理演算は、速度、重力、衝突後の動きなどを計算する仕組みです。
| 場面 | 必要な処理 |
|---|---|
| コインと重なったら得点を増やす | 重なりの検出とゲームのルール |
| 箱が床に落ちて止まる | 重力・移動・衝突への応答 |
| 壁へ触れたらイベントを起こす | 接触の検出とイベント処理 |
トリガーという設定は、接触を検出してイベントを起こしつつ、物理的に押し戻さない用途などで使います。具体的な設定名はエンジンで異なります。
「触れたか」と「触れた後どう動くか」は別です。座標と当たり判定では、四角形の端を数値で比べるところから確認できます。
アニメーションとシェーダー
アニメーションは、時間に沿って状態を変える仕組みです。歩行画像を順に切り替えるだけでなく、位置、角度、色、UIなどを変える場合もあります。
例えばコインを上下へ揺らすなら、時間に応じてY座標を少しずつ変えます。数枚の絵を切り替える方法だけがアニメーションではありません。
シェーダーは、描画などの処理に使うプログラムです。ゲームの説明では、表面の色、光の反射、透明感などをどう描くかを決める役割でよく出てきます。
「アニメーションは動く、シェーダーは止まった色」と完全に分けられるわけでもありません。時間を使うシェーダーで、水面が動くように見せることもあります。
最初は既存の見た目を使い、ゲームのルールが動いてから表現を足すと、原因の切り分けが楽です。表示の問題と、移動計算の問題を同時に直さずに済みます。
FPSとフレーム時間
フレームは、連続する画面の1枚です。FPSは1秒あたりのフレーム数、フレーム時間は1回分にかかる時間です。
60 FPS相当なら、1秒÷60で約0.0167秒、約16.7ミリ秒です。30 FPS相当なら約33.3ミリ秒になります。
平均だけでは引っかかりが分からない
ほとんどの回が16ミリ秒でも、ときどき100ミリ秒かかると、そこで大きく止まったように見えることがあります。平均FPSだけより、各回の時間も見ると原因を探しやすいです。
処理のどこに時間がかかるか調べる道具をプロファイラーと呼びます。描画が重いのか、スクリプトの計算が重いのかを調べてから調整します。スクリプトはゲームの動作を書いたプログラムです。
FPSが違っても移動速度をそろえる
毎フレーム2進めると、30回/秒なら60、60回/秒なら120進みます。そこで、速さを1秒あたりで決め、経過時間を掛けます。
秒速120 × 1/60秒 = 2
秒速120 × 1/30秒 = 4
この経過時間がdelta timeです。ただし物理計算は一定間隔で更新する場合もあり、描画といつも同じ回数ではありません。ゲームループの入門で順番に追えます。
ビルドとエクスポート
ビルドは、制作中のコードや素材を、実行・配布できる形へまとめる作業です。エクスポートは、外へ書き出す作業です。エンジンによって、ゲームを書き出す工程をどちらの名前で呼ぶかが違います。
編集画面で遊べても、完成ファイルに必要な素材が入っていない、初期シーンが違う、対象端末の操作に対応していない、といった問題は起こりえます。
そのため、完成直前まで書き出しを後回しにせず、小さく動いた段階で確認します。マウスで押せるUIでも、スマホの指では押しにくい場合があるので、対象端末での確認も必要です。
最初に覚えたい関係
コインを集めるゲームなら、次の順で進められます。
- 画像と音のアセットを用意し、利用条件を確認する
- シーンへプレイヤーとコインを置く
- 入力・移動・判定・得点の機能を組み合わせる
- 取得済みコインを再度数えないか確認する
- タイトルと終了の状態を分ける
- ビルドまたはエクスポートして試す
用語の数より、「何を作るために必要か」が分かることが大切です。
確認問題:コインが何度も加点される
コインへ触れたとき画像は消えますが、重なっている間ずっと得点が増えます。描画、当たり判定、ゲームのルールのうち、どこをまず調べますか。
模範解答と解説
取得済みかを確認するルールと、判定に参加する条件を調べます。
画像を消すことと、判定を止めることは別です。「まだ有効なコインで、かつ重なった場合だけ加点し、その後は無効にする」という条件があれば、繰り返しの加点を防げます。エンジンが必ず自動で処理するとは限らないため、自分のコードと設定を確認します。
まとめ
素材・場面・機能・動き・配布の順に考えると、用語のつながりが見えます。次はタイトルとゲームオーバーの切り替えなど、小さな仕組みを1つ動かしてみましょう。