カードゲームが作りたかったので【Unityゲームスタジオ スタジオしまづ】さんの動画を見ながら学習してみる
シャドバ風!?カードゲームの作り方 #2 カードの生成
https://youtu.be/fDDGQKVF10M
前回はこちら
【スタジオしまづ】カードゲームの作り方を学んでみる #1 UIの実装
シーンの編集
動画時間0:30~
・いったんフィールドと手札のカードを削除
・ゲームオブジェクトの名前を変更
Field → PlayerField
Hand → PlayerHand
Hero → PlayerHero
CostText → PlayerCostText
ゲームマネージャー(GameManager)の作成
動画時間1:15~
・AssetsにScriptsフォルダーを作成
・ScriptsフォルダーにC#スクリプトを作成して名前を「GameManager」にする
・シーンに空のオブジェクトを作成して名前を「GameManager」にする
・ゲームオブジェクトのGameManagerにスクリプトのGameManagerをアタッチする
手札にカードを生成する動作を実装する
動画時間1:58~
・前段階としてプレハブのカードをシーン上に生成する
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
[SerializeField] GameObject cardPrefab;
void Start()
{
Instantiate(cardPrefab);
}
}
インスペクターでCard PrefabにPrefabsフォルダのカードを設定して実行してみると
ヒエラルキー上にCard(Clone)という名前でカードが生成されていることがわかる
手札に生成するためには手札の場所を知っている必要がある
・スクリプトを手札の情報を持つように編集する
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
[SerializeField] Transform playerHandTransform;
[SerializeField] GameObject cardPrefab;
void Start()
{
Instantiate(cardPrefab, playerHandTransform,false);
}
}
Instantiateは引数に親要素を渡して生成することができる
今回使用する使い方はboolでfalseを指定することにより新しい親を基準として位置を設定するもののようです
Instantiate (Object original, Transform parent, bool instantiateInWorldSpace);
Unityスクリプトリファレンス
PlayerHandTransformにシーンのPlayerHandを設定して実行してみる
手札に生成できた
カードの生成をメソッド化して応用できるように
動画時間5:10~
CreateCardメソッドを作成してカードを手札に生成する処理を移す
さらにTransformを引数にすることで敵の手札にも生成できるようにする
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
[SerializeField] Transform playerHandTransform;
[SerializeField] GameObject cardPrefab;
void Start()
{
CreateCard(playerHandTransform);
}
void CreateCard(Transform hand)
{
Instantiate(cardPrefab, hand, false);
}
}
今回はここまで