Unityカードゲームゲームの作り方メモ

【Unity 2D】シャドウバース風カードゲームの作り方!初心者向け解説(パート1)

Unity

はじめに

「シャドウバース」や「ハースストーン」のようなデジタルカードゲームを自分で作ってみたいと思ったことはありませんか?Unityを使えば、誰でも簡単に2Dカードゲームを作ることができます!

この記事では、シャドウバース風のカードゲームを作るための基本的なUIの作成方法 を解説します。具体的には、以下の内容を順番に学んでいきます。

カードの作成(カードの画像、テキスト情報の配置)
フィールドの作成(手札や場のレイアウト設定)
ヒーローの作成(プレイヤーと敵のヒーローのUI設定)
その他のUI要素(ターンエンドボタン、コスト表示など)

初心者でも理解しやすいように、ステップごとに詳しく説明していきます。


🛠 必要なもの

  • Unity(バージョン2021以上推奨)
  • 2D UIの基本的な知識(未経験でもOK!)
  • 画像アセット(フリー素材を活用)

今回は、カードのイラストとして Aekashics Librarium MegaPack III を使用します。フリーで使える高品質な2Dキャラクター素材なので、ぜひ活用してください!


🎯 この記事のゴール
このパートでは カードの見た目やUIの基本部分を作成する ところまで進めます。カードの操作(ドラッグ&ドロップ)やバトルシステムは、次回以降のパートで実装予定です!

本記事では、シャドウバース風の2Dカードゲームをゼロから作成する方法を解説します。ただし、より本格的なオンラインカードゲームを効率よく開発したい場合は、TCG Engine – Online Card Gameというアセットを活用するのもおすすめです!

それでは、さっそく カードの作成 から始めましょう!🚀




1. カードの作成

シャドウバース風のカードゲームを作るには、まずカードの見た目を作成する必要があります。この記事では、カードのデザイン、画像の設定、情報表示、プレハブ化 までを詳しく解説します。さっそく始めましょう!


1-1. カードのベースオブジェクトを作成

まずは、カードのベースとなるオブジェクトを作成します。

  1. Canvasを作成(まだ作っていない場合)
    • 「Hierarchy」ウィンドウ で右クリック → UICanvas を選択
    • CanvasRender ModeScreen Space - Overlay に変更(デフォルトのままでOK)
  2. カードの本体を作成
    • Canvas の子オブジェクトとして Image を作成
    • 「Hierarchy」ウィンドウ で右クリック → UIImage を選択
    • 名前を「Card」に変更
    • サイズを 200×300 に設定(お好みで調整可能)
  3. Imageコンポーネントを削除
    • 「Inspector」ウィンドウImage コンポーネントの Remove Component をクリック
    • 背景画像や装飾を子オブジェクトで追加するため、ここでは削除しておきます。

1-2. カードの背景を作成

次に、カードの背景となる部分を作成します。

  1. 「Card」の子オブジェクトとして Image を作成
    • Card を選択した状態で、右クリック → UIImage を選択
    • 名前を「BackPanel」に変更
    • Rect Transform のサイズを 親オブジェクト(Card)と同じ 200×300 に設定
    • ImageSource Image に好きな背景画像を設定(カードのベースとなるデザイン)

背景画像がない場合は、UnityのAssetsフォルダにある適当な画像を使うか、フリー素材を利用すると良いでしょう。


1-3. キャラクター画像を設定

次に、カードにキャラクターのイラストを追加します。

  1. 「Card」の子オブジェクトとして Image を作成
    • Card を選択した状態で、右クリック → UIImage を選択
    • 名前を「CharaImage」に変更
    • サイズを 180×180 に設定(お好みで調整)
  2. キャラクターの画像を設定
    • Inspector「Source Image」 にキャラクターのスプライト画像を設定
    • 画像がない場合は、以下のアセットなどを使用するのもオススメ
  3. 位置を調整
    • Rect TransformPos Y を 50 に設定(中央より少し上に配置)
    • ImagePreserve AspectON にして、画像の縦横比を維持



1-4. カード情報を表示するテキストを作成

カードの名前、攻撃力、HP、コストを表示するためにテキストを追加します。

  1. カード名を表示
    • Card の子オブジェクトとして Text を作成
    • 名前を「CardName」に変更
    • フォントサイズを調整
    • Rect Transform を調整してキャラクター画像の下あたりに配置
  2. 攻撃力(ATK)の表示
    • Card の子オブジェクトとして Text を作成
    • 名前を「AttackText」に変更
    • フォントサイズを調整
    • Rect Transformを調整し左下に配置する
  3. HPの表示
    • Card の子オブジェクトとして Text を作成
    • 名前を「HPText」に変更
    • フォントサイズを調整
    • Rect Transformを調整して右下に配置する
  4. コストの表示
    • Card の子オブジェクトとして Text を作成
    • 名前を「CostText」に変更
    • フォントサイズを調整
    • Rect Transformを調整して左上に配置

カードの背景やUIをより魅力的にしたい場合は、Unity Asset Storeの Card Game GUI を活用すると、プロフェッショナルなデザインを手軽に導入できます!


1-5. プレハブ化して再利用可能にする

作成したカードは プレハブ(Prefab) にすることで、簡単に複製できます。

  1. 「Project」ウィンドウの「Assets」フォルダで右クリック
    • CreateFolder を選択し、「Prefabs」というフォルダを作成
  2. 作成したカードをプレハブ化
    • Hierarchy ウィンドウで「Card」を ドラッグして「Prefabs」フォルダにドロップ
    • これで「Card」のプレハブが作成され、簡単に複製できるようになります!
画像に alt 属性が指定されていません。ファイル名: 2024-01-10_025158.png

ここまでで、カードのデザイン、背景、キャラクター画像、情報テキスト、プレハブ化 まで完了しました!次は フィールドの作成 に進んで、カードを配置できる場所を作っていきます。




2. フィールドの作成

カードの準備ができたら、次は フィールドの作成 です。ここでは、手札・プレイヤーフィールド・敵のフィールドを作成して、ゲームの基本的なレイアウトを整えていきます。


2-1. 手札(PlayerHand)の作成

まず、 プレイヤーがカードを持つエリア(手札) を作成します。

① パネル(Panel)を作成

  1. 「ヒエラルキー(Hierarchy)」ウィンドウで右クリック
  2. 「UI」→「Panel」 を選択
  3. 作成されたPanelの名前を 「PlayerHand」 に変更

② サイズと位置を調整

  1. 「インスペクター(Inspector)」ウィンドウでRectTransformを編集
    • PosYを-300 に設定(画面下に配置するため)
    • サイズは好みに応じて調整(例: Width: 800Height: 200
  2. 「Color」を変更(手札のエリアを見やすくするために薄い色にすると良い)

③ カードを横並びにする

手札に並べるカードがキレイに整列するように、 Horizontal Layout Group を追加します。

  1. 「PlayerHand」を選択
  2. 「インスペクター」ウィンドウの「Add Component」ボタンをクリック
  3. Horizontal Layout Group」を検索して追加

Horizontal Layout Group の設定

  • Child AlignmentMiddle Center
  • Spacing20(カード同士の間隔)
  • Control Child Size の「Width」と「Height」に チェックを入れる
  • Use Child Scale の「Width」と「Height」のチェックを外す

この設定をすることで、カードが 横一列に等間隔で並ぶ ようになります!




2-2. プレイヤーフィールド(PlayerField)の作成

次に、プレイヤーが 場に出したカードを配置するエリア を作ります。

① 「PlayerHand」をコピー

「手札(PlayerHand)」と似た構造なので、 そのままコピー すると効率的です!

  1. 「PlayerHand」を右クリック
  2. 「Duplicate(複製)」を選択
  3. 複製されたパネルの名前を 「PlayerField」 に変更

② 位置を調整

「PlayerField」の位置を 手札の少し上 に移動します。

  1. 「PlayerField」を選択
  2. 「インスペクター」でPosYを「-100」に設定

③ 横並びの設定を確認

コピーした時点で、Horizontal Layout Group の設定はそのまま適用されています。

  • 手札と同じように カードが横に並ぶ形 になっていればOK!

2-3. 敵のフィールド作成

プレイヤーのフィールドができたら、 敵のフィールド も作りましょう。

① PlayerHand と PlayerField をコピー

  1. 「PlayerHand」と「PlayerField」を選択
  2. 右クリック → Duplicate(複製)
  3. 名前を 「EnemyHand」「EnemyField」 に変更

② 位置を調整

  • 「EnemyHand」PosY+300
  • 「EnemyField」PosY を **+100`

この設定をすることで、 プレイヤーの手札・フィールドと対称の位置 に配置されます。


フィールド作成の完成!

これで プレイヤーと敵の手札&フィールドが完成 しました!

完成形のフィールド構成

今は見た目だけの配置ですが、次回は カードをプレイヤーの手札に並べる処理カードの移動(プレイ)処理 を作成していきます!




3. ヒーローの作成

カードバトルゲームでは、プレイヤーの分身となる「ヒーロー」を画面に表示するのが一般的です。ここでは、ヒーローの背景、アイコン、HP(体力)の表示を作成し、敵のヒーローも配置する方法を紹介します。


3-1. ヒーローの背景を作成

まずは、ヒーローの背景となるオブジェクトを作成しましょう。

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリック して、「UI」→「Image」を選びます。
  2. 作成したImageの名前を 「PlayerHero」 に変更します。
  3. インスペクター(Inspector)ウィンドウでサイズを調整し、ヒーローの背景となるイメージを設定します。

これでヒーローの背景が完成しました!次に、ヒーローの画像を設定していきます。


3-2. ヒーローの画像を設定

ヒーローの見た目となる画像(アイコン)を設定します。

  1. PlayerHeroを選択し、子オブジェクトとして新しいImageを作成 します。
  2. Imageの名前を 「Icon」 に変更します。
  3. インスペクターで「Source Image」を ヒーローのイラストが描かれたSprite に変更します。
  4. 画像の位置とサイズを調整し、適切な大きさにします。

これでヒーローの画像が画面に表示されました!次に、HPを表示するテキストを追加しましょう。




3-3. ヒーローのHPを表示

ゲーム中、ヒーローのHP(体力)は重要な情報の一つです。HPを表示するために、テキストを追加しましょう。

  1. PlayerHeroの子オブジェクトとして「UI」→「Text」を作成 します。
  2. 名前を 「HP」 に変更します。
  3. インスペクターで次の設定を行います:
    • Text20(初期HPとして設定)
    • Font Size:見やすいサイズ(例:30以上)
    • Color:青
    • Alignment:中央揃え

この設定で、ヒーローのHPが画面に表示されるようになりました。


3-4. 敵のヒーローを作成

プレイヤーのヒーローが完成したら、敵のヒーローも作成します。ほぼ同じ手順で作成できます。

  1. PlayerHeroをコピー(Ctrl + D) して、「EnemyHero」にリネームします。
  2. Position Yの値を変更 し、画面の上側に配置します。
  3. 必要に応じて、敵専用のヒーロー画像やHPの数値を変更します。

これで、プレイヤーと敵のヒーローが完成しました!




4. その他のUI配置

ここでは、カードゲームに必要な ターンエンドボタン、制限時間、コスト表示 を追加していきます。これらのUIは、プレイヤーがゲームを操作するのに欠かせないものなので、しっかり配置していこう!


4-1. ターンエンドボタンの作成

まずは、ターンを終了するための 「ターンエンドボタン」 を作成します。

手順

  1. Canvas内に「UI → Button」を作成
    → 名前を「EndTurnButton」に変更する。
  2. サイズと位置を調整
    → 画面の右下あたりに配置すると、それっぽくなります!
  3. ボタンの見た目を調整
    Text を「ターンエンド」に変更
    フォントサイズやボタンの色 も見やすいようにカスタマイズしよう。

これでターンエンドボタンの配置は完了!ただし、今のままではボタンを押しても何も起こらないから、次回以降 C#スクリプトを使ってボタンに機能を追加 していきます。


4-2. 制限時間の表示

カードゲームには 1ターンの制限時間 を設けることが多いよね。
ここでは 「制限時間をカウントダウン表示するUI」 を作成します。

手順

  1. Canvas内に「UI → Text」を作成
    → 名前を「TurnTimer」に変更。
  2. テキストの内容を「60」に設定
    → これは 「30秒からカウントダウンする想定」です!
  3. フォントサイズ・色・位置を調整
    → 画面の上中央に配置するとわかりやすいよ。

このままだと単なる数字のテキストだから、次回 スクリプトでカウントダウン機能を追加 していきます!




4-3. コストの表示

シャドウバース風のカードゲームには 「コスト(マナ)」の概念 があります。
ここでは、プレイヤーが 今使えるコストを表示するUI を作ってみましょう。

手順

  1. Canvas内に「UI → Text」を作成
    → 名前を「ManaText」に変更。
  2. 初期値として「Cost 10」などのテキストを設定
    → PP(プレイポイント)のように見せるといい感じ!
  3. フォントサイズ・色・位置を調整
    → 画面の左上あたりに配置すると見やすいよ。

これで、コストのUIも完成!


まとめ

  • ターンエンドボタン を追加して、ターンを終了できるようにする(今は見た目だけ)。
  • 制限時間のUI を作成し、カウントダウンの準備をする。
  • コストの表示UI を作成し、ゲームらしい見た目にする。

【Unity 2D】シャドウバース風カードゲームの作り方!初心者向け解説パート2
Unityでシャドウバース風の2Dカードゲームを作成!ScriptableObjectを使ったカードデータの作成・管理、スクリプトによるデータ適用方法を初心者向けに解説します。



よくある質問(FAQ)

Q
カードのデザインを変えたい場合は?
A

BackPanelのImageやCharaImageのSpriteを変更 することでカスタマイズできます。

Q
カードの情報をプログラムで設定できますか?
A

可能です!次回の記事で C#スクリプトを使ってカードの情報を動的に変更する方法 を紹介します。

Q
カードのドラッグ&ドロップはどうやって実装するの?
A

次回の記事で解説予定 ですが、EventTriggerPointerEventData を使うと実装できます。

タイトルとURLをコピーしました