カードゲームの設計で一番工夫が必要なのが、カードデータの管理方法だと思っています。ですが、一度設計できてしまえば、どんなカードゲームにでも応用ができます。ちょっと前に設計を行ったのですが、すぐに忘れてしまうので、メモを残したいと思います。
効果はタイミングと影響で分ける
カードの名前や属性など、単純に管理できるデータはいいのですが、工夫が必要なのはカード効果です。カード効果はスクリプトを実装する必要があるため、カードごとにスクリプトをいちいち実装して管理していては、効率が悪くなります。なので、効果はタイミングと影響にわけ、影響をプレハブで管理することで、管理しやすく効率のいい実装を行います。
影響はプレハブで管理する
影響をプレハブ管理することで、管理するスクリプトは影響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() { 後から実装:実際に影響を及ぼすメソッド }
}
影響スクリプトは名前と説明文、どのカードの影響か、影響を及ぼすメソッドが含まれます。空のゲームオブジェクトを作ってこのスクリプトをアタッチし、プレハブ化します。このプレハブをデータにセットします。