【学習】変数と 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 の編集は デザインとコードを分離する ための基本です。次は入力処理を学びましょう。

訪問数 3 回, 今日の訪問数 3回

広告

Unity

Posted by hidepon