Unity カードバトルゲームの作り方8 プレイヤー初期デッキの設定&CPUカードデータの設定

Unity 本格カードゲームの作り方 ハクスラローグライク×デッキ構築型カードバトルRPG「呪術迷宮」を作る


Unity入門の森オリジナル本格ゲーム制作講座はこちら
9種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

この講座はハクスラローグライク×デッキ構築型カードバトルRPG「呪術迷宮」の作り方講座の第8回です。

前回の記事ではカード効果のUI反映、そしてシングルトンを用いたカードデータ管理のためのマネージャーシステムと日英ローカライズ機能を実装しました。

前回の記事:

デッキ構築型カードバトルゲームの作り方7 カード効果のUI反映・日英翻訳でローカライズ機能をUnityで実現
この記事はハクスラローグライク×デッキ構築型カードバトルRPG「呪術迷宮」の作り方講座の第7回です。 前回で一通りのカードデータとカード効果の設定を行いました。Unityで実践的なカードバトルゲームのカード効果の開発を経験できたかと思います...

今回は前回作成したシングルトンによるデータ管理のシステムを拡張してプレイヤーのデッキデータを管理する機能を作成します。

記事の後半ではこれから戦闘処理を実装していくにあたって必要になる敵キャラクターAIパラメータや行動データも設定していきます。


【Line登録者限定のプレゼントもあるよ!】

デッキ管理スクリプトを作成

Dataクラスを直接拡張してデッキ管理の機能を付けても良いですが、機能を分割する為に新しくPlayerDeckDataクラスを作成します。(Scripts/Commonフォルダ以下がおすすめです)

プレイヤーの初期デッキ、および現在設定中のデッキデータを管理します。Dataクラス同様にDetaManagerオブジェクトにアタッチして使用します。

まずはInspectorから初期デッキを表すplayerInitialDeckパラメータに対してカード設定ファイルをドラッグ&ドロップします。これにより初期データ(ゲーム起動時)でのプレイヤーデッキを作成します。何でも良いので適当なカードを合計10枚以上指定しておきます。

(上記の登録カードは一例です。6章で同じカードを作ってないですが気にしないでください)

今回の設計ではデッキに組み込んだカードのデータをint型のIDで管理しています。このIDは各カードの設定ファイル(CardDataSO)に入力した通し番号(serialNum)と同一です。

複数のデータを持っているCardDataSOファイルそのものでなくIDで管理する事によって今後の拡張の際に取り扱いやすくなります。

ただしIDだけで管理する場合は当然そのIDから該当のカードデータを取得できる機能を用意する必要があります。そのため、allPlayerCardsListパラメータを追加し、ここにプレイヤーが使用する全てのカードをまとめて登録します。IDとカードデータの紐づけをDictionary型であるCardDatasBySerialNumで記憶しておきます。

 

また、ここでプレイヤーが保有している全てのカードをallPlayerCardsListに登録します。

Inspectorからの操作でallPlayerCardsListに全プレイヤーカードを登録しますが、ファイルの1つ1つを順番にドラッグ&ドロップしているととても時間がかかってしまいます。まとめて操作する方法も学んでおきましょう。

Projectビューでの複数ファイルの同時選択自体はShiftキーを押しながらクリックまたは矢印キーの入力で可能です。又はCtrl+Aキーを押す事で開いているフォルダ内の全部のファイルが選択状態になります。

しかし複数のファイルを同時選択するとInspectorビューでの表示が切り替わってしまい先ほどのPlayerDeckDataコンポーネントに対してドラッグ&ドロップ操作が出来ません。

この切り替わりを防ぐ方法としてInspectorビューのロック機能があります。事前にDataManagerオブジェクトを選択しておき、Inspectorビュー右上の鍵マークのアイコンをクリックするとロック状態になり、他のファイルやオブジェクトなどを選択してもInspectorビューが切り替わらなくなります。

この状態でPlayerCardsフォルダ内のカードデータファイル全てをallPlayerCardsListにドラッグ&ドロップすれば完了です。

操作後は忘れずにInspectorのロックを解除しておきましょう。気づかずにロックしたままだと誤操作の原因になりやすいです。

 

なお、「敵が使用するカード全部のリスト」は用意しなくても大丈夫です。敵のデータを設定する際には使用するカードを直接それぞれの敵に対して指定するのでIDで管理する必要はありません。

 

PlayerDeckDataクラスは今後デッキ編集画面を作成した時に拡張を行う予定です。

Dataクラスからの参照をセット

他のクラスからPlayerDeckDataクラスにアクセスできるようにDataクラス内で参照を用意しておきます。

Data.cs

DataManagerオブジェクトのDataコンポーネントにDataManagerオブジェクト自身をアタッチしておきます。

FieldManagerクラスでの現在デッキ管理

FieldManager内にて戦闘中に使用するデッキ(山札)の状態を管理し、ドロー操作によってデッキの中からカードが引かれていく処理を追加します。

PlayerDeckDataクラス内ではプレイヤーの現在のデッキ設定をdeckCardList変数内に(通し番号で)格納していますがこれは「戦闘開始時の初期デッキ」として扱います。

戦闘中にデッキからカードを引く時はFieldManager内に用意する「現在デッキデータ」から引いていきます。このゲームが戦闘ごとに手札や山札の状態がリセットされるルールになっている為です。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.stores.jp/)で講座閲覧権を取得してね。

初期デッキの枚数を変更して色々なパターンでの表示を確かめておくと良いでしょう。

敵キャラクターデータを定義 ステータスパラメータと行動AIの設定

そろそろ戦闘システムの本格的な実装が近づいてきたので次回に向けて敵キャラクターの設定を行えるようにしておきましょう。

カード設定の時と同様に敵キャラクターも沢山の種類を用意するのでScriptableObjectで設定できるようにしておきます。Scripts/Define以下にEnemyStatusSOを作成します。

EnemyStatusSOでデータを管理する

各パラメータの解説は次項で行います。

EnemyStatusSOクラス内に新しいクラスEnemyUseCardDataを宣言していますが、[System.Serializable]属性を付与する事でそのクラスもInspectorでの設定が可能になります。

敵キャラクター設定ファイルの作成

ProjectビューからScriptableObjectフォルダを開き、Enemysフォルダを作成してその中に敵キャラクター設定ファイルを追加していきます。後々複数のステージを実装するのでステージごとにフォルダ分けするのもOKです。

カードデータ作成の時と同様にProjectビューの何もない所を右クリック→Create→ScriptableObjects→EnemyStatusSOを選択で敵キャラクター設定ファイルを作成できます。

日本語と英語でのキャラクター名、画像の設定などはカード設定の時と同様です。画像の大きさは次章で表示させた時に1つ1つ調整していきます。最大HPは適当な数値を入れておきます。

敵キャラクターはターン開始時にプレイボード上に複数のカードを配置します。useCardDatasパラメータでは各ターンで配置するカードの位置や種類を指定します。

useCardDatasリストに要素を追加すると、スクリプト後半で定義しているEnemyUseCardData型の設定項目が追加されます。placeCardData_0~4の5つのパラメータがそれぞれプレイボードの左端~右端に対応し、ここに敵側カードをドラッグ&ドロップする事で使用カードを追加できます。

useCardDatasリストの0番目の設定が1ターン目に適用され、1番目の要素が2ターン目に適用されるという流れになります。全ての行動を終えたら最初の行動に戻るというループを実装するので最低でも1種類の行動さえ設定しておけばOKです。

先ほどのHP設定と同様、細かい設定はバランス調整時に行えば大丈夫です。まずは動作確認として適当な設定にしておきましょう。特にbonusから始まる変数名の撃破ボーナス設定については当分触れないので気にしなくてOKです。

サンプルゲームのエネミーデータについて

本講座のサンプルプロジェクトファイルを参考にしていただければ、どんな形で敵を作ればいいかはわかります。呪術迷宮には数多くの敵キャラクターが存在しますが、一度に全ての敵データを作成する必要はありません。

今後の動作確認用に1~3体程度のデータを用意しておけばOKです。

プロジェクトファイルのデータでも同様に一部の敵キャラクターのみ実装されています。あとはあなたの好きな敵を実装するもよし。呪術迷宮のゲームをプレイして同じ敵の実装に挑戦するもよしです。

まとめ

Dataクラスを拡張してデッキ管理の機能を追加しました。今後もセーブ&ロードが絡んでくる機能や全シーンで共通になる機能はDataクラスを拡張して実装していきます。

そしてプレイヤーのデッキを参照して戦闘開始時に山札を用意し、そこからカードをドローするという最初の流れを実装しました。Random.Rangeを使えば任意の範囲内の数値をランダムに得ることができます。

次回はさらに戦闘画面を充実させるための開発に踏み込んでいきます。

今回はその準備として敵キャラクターのデータ準備までを行いました。ひとまず1体分のデータだけ作っておけば動作確認可能です。

次の記事:

Unity カードバトルゲームの作り方9 ステータスUI・カードバトルアニメーションの実装
この講座はハクスラローグライク×デッキ構築型カードバトルRPG「呪術迷宮」の作り方講座の第9回です。 前回の記事では、戦闘シーン内でプレイヤーのデッキを作りそこからカードを引いてくる処理や敵キャラクターデータの設定を行いました。 前回の記事...

Unity ハクスラローグライク×デッキ構築型カードゲーム「呪術迷宮」の作り方講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
9種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

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