← Unity C#

LESSON / ARTICLE

Prefab・UI・ビルド

Prefabによる再利用、Unity UI、スクリプトからの表示更新、ビルドの流れを学びます。

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へ貼り付けても実行できません。