【Unity】自作クラスの配列を作って使う(インスペクタでシリアライズ)
Unityでは、new演算子で自作クラスは作れない?作らない方がいいのでしょうか?
決してそんなことはありません
確かにシーンに表示されるオブジェクトはUnityエンジンに任せた方がいいですが、情報管理と処理についてはPureC#で作成した方がいいです
今回は、クラスのインスタンスをインスペクターで実現する方法を学びましょう
C#などコードを学んできた方はどんどんスキルを活かしていきましょう
シーン
- 空のゲームオブジェクトを作成します
- ClassSampleをアタッチします
- Playerクラスはプロジェクトウィンドウに作成したままにします
- インスペクターで複数の初期値を代入できます
この値は、シーンファイル(SampleScene.unityファイル)に保存されます
実行結果
太郎 10
二郎 1000
コード
ClassSample
using UnityEngine;
public class ClassSample : MonoBehaviour
{
public Player[] players;
void Start()
{
for (int i = 0; i < players.Length; i++)
{
Debug.Log($"{players[i].name} {players[i].hp}");
}
}
}
public Player[] players;
は、Player
という型の配列を宣言します。この配列は、ClassSample
クラスの外部からアクセスできるようにパブリックに宣言されています。
Start()
は、Unityエンジンがゲームオブジェクトを有効にしたときに呼び出されるメソッドです。このメソッドは、配列players
内の各Player
オブジェクトの名前とHPをデバッグログに出力するループを含んでいます。
for (int i = 0; i < players.Length; i++)
は、players
配列の各要素にアクセスするためのfor
ループを開始します。i
変数は、ループ中にカウンターとして使用されます。
Debug.Log($"{players[i].name} {players[i].hp}");
は、現在のPlayer
オブジェクトの名前とHPを含む文字列をデバッグログに出力します。players[i]
は、players
配列内の現在の要素を参照します。name
とhp
は、Player
オブジェクトのパブリックフィールドであり、名前とHPの値を含みます。
このスクリプトは、複数のPlayer
オブジェクトの情報をデバッグログに表示するために使用されます。
Player
[Serializable]
public class Player
{
public string name;
public int hp;
}
[Serializable]
属性は、このクラスのインスタンスがシリアル化できることを示しています。シリアル化は、オブジェクトの状態をバイトストリームに変換し、データを永続化することができます。これにより、ゲームのセーブデータを保存することができます。
public class Player
は、Playerクラスを定義しています。このクラスには、name
とhp
という2つのメンバ変数があります。
public string name
は、Playerクラスのインスタンスが持つ名前を表します。文字列型のname
変数は、publicキーワードによってアクセス可能になっています。これにより、この変数に外部からアクセスできます。
public int hp
は、Playerクラスのインスタンスが持つ体力ポイントを表します。整数型のhp
変数も、publicキーワードによってアクセス可能になっています。これにより、外部からこの変数にアクセスでき、体力ポイントを変更できます。
このクラスを使用することで、ゲーム内のプレイヤーの情報を管理することができます。例えば、プレイヤーの名前と体力ポイントを保存することができます。
[Serializable]
属性とすることで、インスペクターでの値の代入が可能になります
ディスカッション
コメント一覧
まだ、コメントがありません