前回のゲーム制作に置いての補足#ゲーム制作2.5


前回の記事の補足情報になります。

カードはどんな役割の要素なのか

カードにはHPやAT、画像といった基本的な情報を保有していて(下記通り)

保有データ

CardModel.cs
    public Sprite icon;
    public new string name;
    public int hp;
    public int at;
    public bool isDead;

CardModelを生成した時に呼ばれる関数(コンストラクタ?)
事前に用意したScriptableObjectの情報を読み込むものになっています。

CardModel.cs
    //Entityからカードモデルにデータを送る
    public CardModel(int cardID)
    {
        CardEntity cardEntity = Resources.Load<CardEntity>("CardEntityList/Card"+cardID);
        icon = cardEntity.icon;
        name = cardEntity.name;
        hp = cardEntity.hp;
        at = cardEntity.at;
        isDead = false;
    }

CardViewで、モデルへのデータの受け渡しと描画を行っていて

CardView.cs
    public void Show(CardModel cardModel)
    {
        // カードデータの受け渡し+描画
        iconImage.sprite = cardModel.icon;
        hpText.text = cardModel.hp.ToString();
        atText.text = cardModel.at.ToString();   
    }

CardControllerでModelを生成してViewを介して描画しているといった形を取っています。

CardController.cs
    public void Init(int cardID)
    {
        model = new CardModel(cardID);// 生成
        view.Show(model);// 反映
    }

実際にカードをInstantiateする時はこのように記述しています。

GameManager.cs
        //生成
        CardController card = Instantiate(cardPrehab, position, false);
        card.Init(cardID);

※CardPrehab→カードの型のPrefab

※Position→親要素にしたいPanel

役割としては、対戦にあたって体力の管理をしたり戦闘で勝利した時攻撃力分ダメージを与えると言ったことがあります。

どういうデータをどのように渡そうとして上手くいってないのか

結論から言うとカードの作りをあまり変更せずCardControllerの情報全てを受け渡ししたいと考えています。ですが現状はCardControllerの型でPhotonNetwork.Instantiateをすることが出来ない(CardPrehabには空の型しかない+GameObject型では内部にデータを持つことが出来ないため)ので困り果てていた状態です(;´д`)トホホ…

ターン制なので常にデータをたくさん送受信する予定はなく
多少多くデータを保有していても問題ないかと思っています。(浅はかだったら申し訳ないです)

以上です。ありがとうございました。