カードデータを管理するデータオブジェクトの設計

カードゲームの設計で一番工夫が必要なのが、カードデータの管理方法だと思っています。ですが、一度設計できてしまえば、どんなカードゲームにでも応用ができます。ちょっと前に設計を行ったのですが、すぐに忘れてしまうので、メモを残 […]

カードゲームの設計で一番工夫が必要なのが、カードデータの管理方法だと思っています。ですが、一度設計できてしまえば、どんなカードゲームにでも応用ができます。ちょっと前に設計を行ったのですが、すぐに忘れてしまうので、メモを残したいと思います。

効果はタイミングと影響で分ける

カードの名前や属性など、単純に管理できるデータはいいのですが、工夫が必要なのはカード効果です。カード効果はスクリプトを実装する必要があるため、カードごとにスクリプトをいちいち実装して管理していては、効率が悪くなります。なので、効果はタイミングと影響にわけ、影響をプレハブで管理することで、管理しやすく効率のいい実装を行います。

影響はプレハブで管理する

影響をプレハブ管理することで、管理するスクリプトは影響1つに対してスクリプト1つで済みます。例えばカードドローの効果であれば、X枚ドローするというスクリプトを用意し、カードごとに変化するドロー枚数を、後から管理できるようにします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CE_DrawCard : ICardEffect
{
    public int nDraw;
    public string Name { get { return "DrawCard"; } }
    public string EffectText { get { return $"カードを{nDraw}枚ドローする"; } }
    public Card Owner { get; private set; }
    // puvlic void Affect() { 後から実装:実際に影響を及ぼすメソッド }
}

影響スクリプトは名前と説明文、どのカードの影響か、影響を及ぼすメソッドが含まれます。空のゲームオブジェクトを作ってこのスクリプトをアタッチし、プレハブ化します。このプレハブをデータにセットします。