【学習】変数と Inspector での編集(public 変数、SerializeField)
これまでの学習では、
- C# スクリプトを作成した
- Start と Update で処理を書いた
という形でスクリプトを動かしてきました。
しかし、移動速度や参照するオブジェクトをコードに直接書くと、値を変えるたびにスクリプトを編集する必要があります。
Inspector から変数を編集する
という仕組みを使えば、コードを触らずに調整できます。
今回は public 変数 と SerializeField を使って、Inspector から値を設定する方法を学びます。
今日学ぶこと
- public 変数 … Inspector に表示され、編集できる
- SerializeField … private なのに Inspector に表示する
- 参照の渡し方 … 他の GameObject やコンポーネントを紐付ける
public 変数で Inspector に表示する
スクリプトで public な変数を宣言すると、Inspector に表示されます。
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 5f;
public string playerName = "プレイヤー";
void Update()
{
transform.Translate(speed * Time.deltaTime, 0, 0);
}
}
| 変数 | Inspector での表示 |
|---|---|
| speed | 数値入力欄(デフォルト 5) |
| playerName | 文字列入力欄 |
実行中に Inspector の値を変えると、その場で挙動が変わります(再生中のみ。停止すると元に戻ります)。
SerializeField で private を Inspector に出す
private にすると、他のスクリプトからアクセスできず、カプセル化できます。一方で、Inspector には出したくない場合もあります。
SerializeField を付けると、private のまま Inspector に表示できます。
[SerializeField]
private float speed = 5f;
- 外部のスクリプトからはアクセスできない
- Inspector からは編集できる
- デバッグやデザイナーとの連携に便利
GameObject やコンポーネントを参照する
他の GameObject やコンポーネントを参照するには、型で変数を宣言します。
public GameObject targetObject;
public Transform targetTransform;
public SpriteRenderer spriteRenderer;
Inspector では、該当するオブジェクトやコンポーネントをドラッグして代入できます。Hierarchy や Scene からドラッグ&ドロップで設定します。
完成コード例
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
[SerializeField]
private float moveSpeed = 5f;
public GameObject effectPrefab;
private Vector2 moveInput;
void OnMove(InputValue value)
{
moveInput = value.Get<Vector2>();
}
void Update()
{
float moveX = moveInput.x * moveSpeed * Time.deltaTime;
transform.Translate(moveX, 0, 0);
}
}
- moveSpeed … Inspector で調整可能(SerializeField)
- effectPrefab … プレハブを Inspector で割り当て可能
- ※プレイヤーに PlayerInput をアタッチし、Actions に InputSystem_Actions、Default Map を Player に設定してください(入力の詳しい説明は次回)
プログラムの流れ
Inspector で変数の値を設定
↓
ゲーム開始時にその値が読み込まれる
↓
Update などで変数を使用
↓
値は再生中も Inspector で変更可能
重要ポイント
public や SerializeField を付けた変数は、Inspector から編集できます。
- public … Inspector に表示され、他のスクリプトからもアクセス可能
- SerializeField … private のまま Inspector に表示。カプセル化しつつ調整可能
- GameObject / Transform などの型で、オブジェクトやコンポーネントを参照できる
- 値をコードに直書きせず、Inspector で変えられるようにすると調整しやすい
発展アイデア
変数と Inspector の連携が分かったら、次のステップです。
- 入力の取得 … キー入力でキャラを動かす
- 当たり判定 … 他のオブジェクトとの衝突を検知する
変数と Inspector の編集は デザインとコードを分離する ための基本です。次は入力処理を学びましょう。



ディスカッション
コメント一覧
まだ、コメントがありません