カードゲームが作りたかったので【Unityゲームスタジオ スタジオしまづ】さんの動画を見ながら学習してみる
シャドバ風!?カードゲームの作り方 #3 カードデータの生成
https://youtu.be/9VtfajLzSrg
前回はこちら
【スタジオしまづ】カードゲームの作り方を学んでみる #2 カードの生成
カードを扱うスクリプト(CardController)を作成
動画時間0:40~
・ScriptsフォルダにC#スクリプトを作成し名前を「CardController」にする
CardControllerは
見かけ(view)に関することを操作
データ(model)に関することを操作
の2つを扱うがデータ(model)は別のクラスで実装する
カードデータのスクリプト(CardModel)を作成
動画時間2:15~
・ScriptsフォルダにC#スクリプトを作成し名前を「CardModel」にする
・カードのデータに必要な項目をpublicで定義してく
(後で追記します)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// カードデータそのものとその処理
public class CardModel
{
public string name;
public int hp;
public int at;
public int cost;
public Sprite icon;
}
・CardControllerに追記(後でまた追記します)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CardController : MonoBehaviour
{
// データ(model)に関することを操作
CardModel model;
public void Init()
{
model = new CardModel();
}
}
・プレハブのカードにCardControllerをアタッチする(プレハブを開くを押してから行うこと)
カードエンティティ(CardEntity)を作成
動画時間4:40~
カードの元々の情報を持つ外部データ(エクセル、csvなど)として「ScriptableObject」を使用する
ScriptableObject - Unity マニュアル
・ScriptsフォルダにC#スクリプトを作成し名前を「CardEntity」にする
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName ="CardEntity", menuName ="Create CardEntity")]
// カードデータそのもの
public class CardEntity : ScriptableObject
{
public new string name;
public int hp;
public int at;
public int cost;
public Sprite icon;
}
CardEntityができたらUnityの作成メニューに「Create CardEntity」が出てくるようになり、簡単にカードデータを作成できる
最初のカード(Card1)を作成
Card1の情報を使ってゲーム内にカードを生成する
・Assetsにフォルダを作成し名前を「Resources」にする
・PrefabsフォルダをResources内に移動させる
・Resourcesにフォルダを作成し名前を「CardEntityList」にする
・Card1をCardEntityList内に移動させる
・CardModelを編集
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// カードデータそのものとその処理
public class CardModel
{
public string name;
public int hp;
public int at;
public int cost;
public Sprite icon;
public CardModel(int cardID)
{
CardEntity cardEntity = Resources.Load<CardEntity>("CardEntityList/Card"+cardID);
name = cardEntity.name;
hp = cardEntity.hp;
at = cardEntity.at;
cost = cardEntity.cost;
icon = cardEntity.icon;
}
}
・CardControllerを編集
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CardController : MonoBehaviour
{
// データ(model)に関することを操作
CardModel model;
public void Init(int cardID)
{
model = new CardModel(cardID);
}
}
・GameManagerを編集
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
[SerializeField] Transform playerHandTransform;
[SerializeField] CardController cardPrefab;
void Start()
{
CreateCard(playerHandTransform);
}
void CreateCard(Transform hand)
{
//カードの生成とデータの受け渡し
CardController card = Instantiate(cardPrefab, hand, false);
card.Init(1);
}
}
cardPrefabの型を変えたせいでGameManagerのcardPrefabの指定が「なし」になっているので改めてPrefabsからCardを設定する
今回はここまで