【Unity】自作のクラスのサンプル

Unityで、PlayerとEnemyがそれぞれゲームオブジェクトでStatusクラスを共有している場合のサンプルコードを以下に示します。

PlayerとEnemyがそれぞれゲームオブジェクトでStatusクラスを共有しているケース

まず、Statusクラスを定義します。

public class Status
{
    public int maxHp;
    public int currentHp;
    public int attack;
    public int defense;
}

次に、PlayerクラスとEnemyクラスを定義します。両方のクラスはStatusクラスをフィールドとして持ち、同じインスタンスを共有するようにします。

public class Player : MonoBehaviour
{
    public Status status;

    void Start()
    {
        // 初期化処理など
        status = new Status();
        status.maxHp = 100;
        status.currentHp = 100;
        status.attack = 10;
        status.defense = 5;
    }

    // その他のメソッドなど
}

public class Enemy : MonoBehaviour
{
    public Status status;

    void Start()
    {
        // 初期化処理など
        status = new Status();
        status.maxHp = 50;
        status.currentHp = 50;
        status.attack = 5;
        status.defense = 3;
    }

    // その他のメソッドなど
}

上記のサンプルコードでは、PlayerクラスとEnemyクラスがそれぞれStatusクラスをフィールドとして持ち、同じインスタンスを共有するようにしています。Startメソッドで、それぞれのクラスでStatusクラスのインスタンスを作成して、初期化しています。

以下は、上記のコードを使用してPlayerとEnemyを作成し、Statusクラスのフィールドを参照する例です。

public class Game : MonoBehaviour
{
    public Player player;
    public Enemy enemy;

    void Start()
    {
        // 初期化処理など
        player = GameObject.Find("Player").GetComponent<Player>();
        enemy = GameObject.Find("Enemy").GetComponent<Enemy>();

        Debug.Log("Player Max HP: " + player.status.maxHp);
        Debug.Log("Enemy Defense: " + enemy.status.defense);
    }

    // その他のメソッドなど
}

上記の例では、GameクラスでPlayerとEnemyを作成し、Statusクラスのフィールドを参照しています。Playerの最大HPやEnemyの防御力など、それぞれのクラスのStatusクラスのフィールドにアクセスできていることがわかります。

PlayerとEnemyがそれぞれゲームオブジェクトでStatusクラスを共有していてそれぞれ少し違いたあるため継承しているケース

以下は、UnityでPlayerとEnemyがそれぞれゲームオブジェクトでStatusクラスを共有していて、それぞれ少し違いがあるため継承しているクラスのサンプルコードです。

まず、共通のStatusクラスを定義します。

public class Status
{
    public int health;
    public int power;
    public int defense;
}

次に、Statusクラスを継承したPlayerStatusクラスを定義します。

public class PlayerStatus : Status
{
    public int magicPower;
    public int agility;
}

PlayerStatusクラスは、Statusクラスを継承しています。また、magicPowerとagilityというフィールドを追加しています。

最後に、Statusクラスを継承したEnemyStatusクラスを定義します。

public class EnemyStatus : Status
{
    public int experience;
    public int speed;
}

EnemyStatusクラスもStatusクラスを継承しています。また、experienceとspeedというフィールドを追加しています。

ここで、PlayerクラスとEnemyクラスはそれぞれGameObjectにアタッチされているものとします。

Playerクラスの例:

public class Player : MonoBehaviour
{
    public PlayerStatus status;

    private void Start()
    {
        status = new PlayerStatus();
        status.health = 100;
        status.power = 50;
        status.defense = 20;
        status.magicPower = 30;
        status.agility = 40;
    }
}

Enemyクラスの例:

public class Enemy : MonoBehaviour
{
    public EnemyStatus status;

    private void Start()
    {
        status = new EnemyStatus();
        status.health = 80;
        status.power = 30;
        status.defense = 10;
        status.experience = 100;
        status.speed = 20;
    }
}

上記のコードでは、PlayerクラスとEnemyクラスのそれぞれのインスタンスに、PlayerStatusクラスとEnemyStatusクラスをそれぞれアタッチしています。そして、Startメソッドでそれぞれのクラスのフィールドを初期化しています。

これで、PlayerとEnemyがそれぞれゲームオブジェクトでStatusクラスを共有しているため、それぞれのクラスがStatusクラスを継承することで、少し違いがある状況でも共通の基本機能を共有することができます。