【Unity】自作クラスを作って使う(インスペクタでシリアライズ)

Unityでは、new演算子で自作クラスは作れない?作らない方がいいのでしょうか?
決してそんなことはありません
確かにシーンに表示されるオブジェクトはUnityエンジンに任せた方がいいですが、情報管理と処理についてはPureC#で作成した方がいいです

今回は、クラスのインスタンスをインスペクターで実現する方法を学びましょう

C#などコードを学んできた方はどんどんスキルを活かしていきましょう

シーン

  1. 空のゲームオブジェクトを作成します
  2. ClassSampleをアタッチします
  3. Playerクラスはプロジェクトウィンドウに作成したままにします
  4. インスペクターで初期値を代入します

この値は、シーンファイル(SampleScene.unityファイル)に保存されます

実行結果

二郎 1000

コード

ClassSample

using UnityEngine;

public class ClassSample : MonoBehaviour
{
    public Player player;

    void Start()
    {
        Debug.Log($"{player.name} {player.hp}");
    }
}

Player

[Serializable]
public class Player
{
    public string name;
    public int hp;
}

[Serializable]属性は、このクラスのインスタンスがシリアル化できることを示しています。シリアル化は、オブジェクトの状態をバイトストリームに変換し、データを永続化することができます。これにより、ゲームのセーブデータを保存することができます。

public class Playerは、Playerクラスを定義しています。このクラスには、namehpという2つのメンバ変数があります。

public string nameは、Playerクラスのインスタンスが持つ名前を表します。文字列型のname変数は、publicキーワードによってアクセス可能になっています。これにより、この変数に外部からアクセスできます。

public int hpは、Playerクラスのインスタンスが持つ体力ポイントを表します。整数型のhp変数も、publicキーワードによってアクセス可能になっています。これにより、外部からこの変数にアクセスでき、体力ポイントを変更できます。

このクラスを使用することで、ゲーム内のプレイヤーの情報を管理することができます。例えば、プレイヤーの名前と体力ポイントを保存することができます。

[Serializable]属性とすることで、インスペクターでの値の代入が可能になります

インスペクターへ表示をしない場合