Prefab・UI・ビルド
この章では、これまで学んだGameObject、Component、C#スクリプトをまとめ、ゲーム内のオブジェクトや画面表示を構成する方法を見ていきます。最後にUnityプロジェクトをビルドする流れを確認します。
Prefabとは
PrefabはGameObjectとそのComponent、子オブジェクト、設定を再利用するためのアセットです。Hierarchy上のGameObjectをProjectビューへドラッグするとPrefabを作成できます。PrefabをSceneへ配置すると、同じ構成のオブジェクトを複数利用できます。
Prefabの元データを変更すると、そのPrefabを参照するインスタンスへ変更を反映できます。個別のインスタンスだけを変更した場合はOverrideとして扱われます。アイテムや敵など同じ構成のオブジェクトを複数配置するとき、Prefabを使うと設定を統一しやすくなります。
UIの基本
Unity UIではCanvasの下にText、Button、ImageなどのUI要素を配置します。新規プロジェクトではTextMeshProのテキスト要素を使う方法が一般的です。UI要素を作成すると、必要に応じてEventSystemもシーンに追加されます。
Canvas Scalerは画面サイズや解像度に応じたUIの拡大縮小を調整します。AnchorはUI要素を画面や親RectTransformのどこに固定するかを決めます。たとえば取得数を画面左上に表示する場合、Rect TransformのAnchorを左上に設定します。
スクリプトからUIを更新する
using TMPro;
using UnityEngine;
public class ScoreView : MonoBehaviour
{
[SerializeField] private TMP_Text scoreText;
private int score;
void Start()
{
UpdateScoreText();
}
public void AddScore(int amount)
{
score += amount;
UpdateScoreText();
}
private void UpdateScoreText()
{
scoreText.text = $"Score: {score}";
}
}
TMP_TextはTextMeshProのテキスト表示を扱う型です。scoreTextはInspectorから対象のテキスト要素を割り当てます。AddScoreが呼ばれるとスコアを加算し、UpdateScoreTextで表示内容を更新します。Inspectorで参照を割り当て忘れるとNullReferenceExceptionが発生するため、必要な参照が設定されているか確認します。
Buttonのクリック処理はInspectorのOn Clickイベント、またはコードからイベントを登録して扱えます。UIイベントを受け取るにはEventSystemや適切なInput Moduleがシーンに存在することも確認します。
収集ゲームの構成例
これまでの内容を組み合わせた収集ゲームは、次のような構成にできます。
Main Scene
├── Main Camera
├── Directional Light
├── Player
│ ├── Rigidbody
│ ├── Collider
│ └── PlayerController
├── Items
│ ├── Item (Prefab instance)
│ ├── Item (Prefab instance)
│ └── Item (Prefab instance)
└── Canvas
└── ScoreText (TextMeshPro)
PlayerControllerは入力と移動、ItemDetectorはアイテム接触の検知、ScoreViewは取得数の表示を担当する、といったように役割を分けます。アイテムはPrefabから配置し、同じ見た目や設定を再利用します。
ビルド
ゲームを実行ファイルなどに出力する操作をBuildと呼びます。Build SettingsまたはBuild Profilesから対象プラットフォーム、Scene、出力先などを確認します。Unityのバージョンによって画面名が異なる場合があります。
ビルド前には次の点を確認します。
- 起動時に必要なSceneがビルド対象に含まれている。
- 対象プラットフォームのBuild Supportモジュールがインストールされている。
- Consoleに未解決のコンパイルエラーが残っていない。
- UIや入力など、実行環境に依存する機能が意図どおり設定されている。
Build後はEditor上だけでなく、出力されたアプリケーションも起動して動作を確認します。Editorでは動いても、ファイル参照やプラットフォーム設定の違いによってビルド後に問題が出ることがあります。
よくある問題
- PrefabではなくScene上のインスタンスだけを変更し、元Prefabに反映したと思い込む。
- InspectorでTextMeshProの参照を割り当てていない。
- CanvasのAnchorやCanvas Scalerが適切でなく、解像度によってUIがずれる。
- Build対象Sceneを追加し忘れる。
- 対象プラットフォームのBuild Supportがインストールされていない。
コース全体のまとめ
C#の変数・条件分岐・繰り返し・メソッド・クラスを基礎として、UnityのGameObjectとComponent、MonoBehaviour、Transform、入力、物理演算を組み合わせることでゲームの振る舞いを作れます。Prefabは構成の再利用、UIはプレイヤーへの情報表示、Buildは完成したプロジェクトを実行可能な形にするための仕組みです。
このコースのコード例は、UnityのAPIを含むものはUnity Editor上で動かすことを前提としています。通常のC#コンソール実行環境にはUnityEngineのAPIが含まれないため、UnityスクリプトをそのままコンソールRunnerへ貼り付けても実行できません。