【Unityゲーム】ブログと動画を参考にして作っているカードバトル(シャドバ風)がある程度まとまってきた

『ヒースブログ』の管理人のヒースです。

ブログや動画を参考にして作成していたカードゲームがある程度形になったので、せっかくなので色々記録に残しておくことにした。

ゲームはちゃんと動くが演出面がほとんどないので、ある意味ではサクサクと快適だが、やはりまだまだ味気ないのは隠せない。

タイトル画面

とりあえずいきなりバトル画面というのがどうにもよろしくないので、ゲームシーンとしてタイトル画面を設定してみた。

タップするとステージセレクトシーンに進むという極簡単な挙動。

ステージセレクト

ステージセレクトシーンでは、とりあえず対戦相手のエネミーをズラッと並べてみたかったので、文字通りとりあえず並べてみた(当時は★3までしかクリックしても反応すらしないという)

★がそのままゲームの難易度となっていて、ある程度★が多くなるとAIが賢くなるようにしている——のだが、そこまで大きな差になるほどの賢い設定をすることはできていない………………と思う。

メイン画面1

メイン画面は最初の設計でブログや動画と異なり、かなりの大画面で作成していたため(Unityの教科書で使用していたiPhone10以上の大画面)、自分のiPhone7Plusで実行したら大幅に見切れたので1920×1080で配置し直した。
横向きで縦解像度に応じて拡大縮小されるはずなので、横向き固定で縛りを入れている。

左上のEXITでステージセレクトへ戻れるようにしているのは、テストプレイ時にデッキと手札が切れた時に何もできなくなったためのリセット用。現在はデッキ切れで負け判定になっているので、使い道としては対戦相手を変えたい時くらい。いつでも有効で押すと確認も出ないので、間違って押すとそこで試合終了である。

左側には現在のターンカウントとそれぞれの操作可能時間のタイマーカウントがあり、右側には速度変更(等倍速、2倍速、4倍速)ボタンとプレイヤーのみ使えるターンエンドボタンがある(スペルミスってるし……)

速度変更はソシャゲを意識したもので、実際はエネミーのカード操作の待ち時間を半減、さらに半減しているだけ。敵ターンが秒で終わるので結構優秀な機能だが、4倍速だとなかなかの速さで見えなくなることもある。

メイン画面2

左下がプレイヤーで右上がエネミー。
大きな数字はHPでこれが0になると負け。隣は現在コストと最大コスト。コストを消費してモンスターを召喚したり魔法を使ったりする。

中央がフィールドでその上下がそれぞれの手札。
コストが足りていればフィールドには最大5体までモンスターカードを出すことができて、手札は最大6枚まで持てる。
初期手札は3枚で、常に3枚になるまで毎ターンデッキからカードが補充される。3枚以上所持している時は1枚ずつ補充されて6枚が上限でそれ以上ドローしなくなる。

モンスターカードは左上がコスト、右上がモンスター名。左下の青い数字が攻撃力で、右下の赤い数字が生命力。
最初は同時攻撃を実装していたが、戦闘が長引くので先行後攻の概念を加えたバトルシステムにしている。
フィールドのカードが攻撃可能状態であれば相手フィールドのカードに重ねることで先制攻撃をおこない『攻撃力ー生命力』で判定して、生命力が0以下になればカード勝利。差分は貫通ダメージとしてプレイヤーやエネミーのHPを削る。
逆に先行で倒せなかった場合は後攻として反撃を受ける。
その場合は攻撃を仕掛けたカードの生命力が相手の攻撃力分削られて、それで生命力が0になった場合は反撃の貫通ダメージを受ける。
倒し切れる相手を攻撃するのが基本だが、生命力の高いカードで削りを入れてから貫通ダメージを狙うのもあり。

CPUの★の数によるAIはここに効かせていて、★2まではランダムで攻撃してくるが、★3から★7は倒せる相手かどうか、反撃で生き残るかどうか、反撃されるならより少ないダメージかどうかを見て攻撃してくる。
また、★8以上だとコストがより高いカードを優先的に狙ってくる。モンスターのコストが高いほど攻撃力と生命力の合計値が高いので、強いカードを早めに潰しにかかってくる。これは判定がうまくいっていない可能性があって、まだ検証中となる。

魔法カード

下段のパネルに表示されているのが魔法カード。

最初はフィールドに登場せずプレイヤーのみ使用できるリーダースキルとして実装してみたが、なんとなくフィールドに混ぜられそうな気がして実際混ぜられたので今はここから使用する運用は削ることにしている。

ただ、今はまだあえてリーダースキルは残している。魔法の効果を見たいときはここから発動すると早い。
とはいえ、12種類からランダムで4種セッティングされる仕組みなのでいざ使いたい魔法を所持していないこともあるので、なんとなく残しているというのが正しいか。
(プレイヤーをタッチすると表示非表示になる仕様が未実装のパッシブスキルと兼用しているので削れない機能という面もある)

魔法カードは簡単な効果からの実装に留め、モンスターを直接破壊するデストロイ系、一定のダメージを与えるダメージ系とその逆のヒール系、攻撃力を増加させるバフ系とその逆のデバフ系、プレイヤーの自己回復やエネミーへのダイレクトアタック、それとカードドローと相手のデッキ破壊など、単体や全体を含んで全12種類。
スリップダメージのポイズン系などの状態異常も作ってはあるが処理を実装できていない。

プレイヤーが使うのはタップするだけで簡単なんだけど、CPUに使わせるのがなかなか難産だった。さらにプレイヤーが相手のターンだろうが相手の魔法カードだろうがタップしたら発動するバグもしばらく直せなかった(今は直っている)

今後の改善として、各魔法カードにタップしたカードを対象とする処理を加えたい。今は全体魔法とランダム対象で誤魔化している。

リザルト画面

リザルト画面はゲーム画面にパネルを被せているのでシーン変更はしていない。リスタートでパネルが消えて初期値に戻って同じデッキ(順番はシャッフルされる)、同じエネミーで再戦となり、セレクトエネミーでステージセレクトシーンに遷移して対戦相手を選び直す。

リザルト画面の背後で手札やフィールドのカードオブジェクトを破壊して各UI数字もリセットしているので目隠しの意味もある。

その他

一応各ターンの切り替え時にターンチェンジパネルを表示している。
本来は戦闘開始時にバトルスタートと表示しているのだが、ステージ遷移やパネル表示非表示などの待ち時間の問題かそもそもの設定が狂っているのか表示されずにいきなりプレイヤーターンと出る。問題はないので放置しているがコードの無駄なことは間違いない。

また、タイトル、ステージセレクト、メイン画面、リザルト画面はBGMが鳴る。
SEはカード同士の戦闘時にムチの効果音でバシッと鳴るだけ。魔法カードが無演出なのが気になって仕方がないが、実装できないものは仕方ないので今は調べているに留まっている。魔法効果はちゃんと演出したい。

あと、今はパネルの色だけのカード枠もちゃんと作りたい。画像を用意するのが難しいので先の話になりそうだけど。


ちなみにこのゲームは表記が数字と英語(たまに和製英語)しかない。
たまたまだったのだが、せっかくなのでそのままにして作成を続けたため魔法カードの実装で苦労をする羽目になった。英語ではなく英語っぽい表記なので、なんとなーくな感じになっていてわかりづらくなっている。
またルール説明を英語で作ることできないため、なんの説明もチュートリアルもないままゲームは始まり、そのまま淡々と進んでいく。

またサンプル画面では見えないけど、プレイヤーは勝利するごとに撃墜数の★が貯まるようになっている。セーブデータがないのでゲームが終われば消えるけど、連戦している時は★が増えるのはなかなか気持ちがいい。

連戦といえば、せっかくだから★1から★12まで連戦させるモードを用意するのもいいかもしれない。ステージセレクトからメイン画面への遷移を連戦処理で代用すれば普通に実装できそう。ステージセレクトシーンの右上あたりに連戦モードボタンを追加してみようかな。

このカードバトルゲームはUnityで0から作ったゲームではあるが、最初が丸写しなのでまだまだ完全にUnityを理解したとは言えない。
ただ、魔法カードの実装を四苦八苦している内に、GameObjectとTransform絡みのFINDやGetChild、GetCompornentあたりが使えるようになってきたので各オブジェクトに対する操作がやりやすくなってきたという実感はある。

とはいえ、思ったようにすぐに処理が書けるわけでもないので、かなり長い時間を消費して徐々に徐々に良くしていくしかない。

魔法カードはある程度の効果なら実装することがそれほど難しくなさそうなので、貫通ダメージを防御するシールド系、攻撃対象を操作する挑発系、墓地のカードをデッキに戻す蘇生系、フィールドや手札の枚数を制限するロック系、コストを増減させるチャージ系……等々、作れそうとはいえこのゲームでは余剰すぎるのであまり意味ないか。

カードスキルも実装していないので、カード種類を増やしてもあまり意味がない。ちゃんとカードスキルも実装し、ターゲット選択の機能も合わせて多様なカードバトルができるようにしておきたいところだ。

Twitterではブログに書き切れないことをたくさんつぶやいていますので、ヒースに興味を持っていただければフォローをお願いします。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!

当ブログで使用のブロックエディター特化の美麗テーマ

シンプル美と機能性を両立させた、国内最高峰のWordPressテーマ『SWELL』

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる