アニメやゲーム記事 プリキュア関連

notebook

IT UNITY

[UNITY]カードゲーム製作-11-

更新日:



YOUTUBEのHOWTO動画を参考にオリジナルのカードバトルをUNITYで製作するシリーズの第11回。

前回はエネミー側のコストに応じたカード選択とコストの回復、さらにタイマー機能を実装しました。今回もひきつづき参考動画をもとにゲーム製作を進めていきます。

 

1.エネミー側の時間制御

現状ではエネミーターンになった際にノータイムで処理されます。そのためユーザーは何がおこっているのか分かりにくいため、エネミー側の処理時にすこし時間を空けて処理するようにします。あわせてターン切り替えされても攻撃可能枠が表示されているため、プレイヤーおよびエネミーのそれぞれ自身のターンになったタイミングで表示するように修正します。

 

1)実施内容

・「GameManager」クラスの「EnemyTurn」メソッドをIEnumrator定義に変更

・「EnemyTurn」内のエネミー手札選択時、攻撃時、ターン終了時にそれぞれWaitを1秒設定する

・「GameManager」クラスに「SettingCanAttackView」メソッドを追加。パラメタのFLGに応じて攻撃可能枠の表示を行う。また、プレイヤーターン、エネミーターン時にTRUEパラメタでCallし、ターン処理の最初にそれぞれ一度FALSEパラメタでCallして初期化する。

 

2)終了時点の状態

エネミー側のターンが一瞬で終わらずに手札への追加、攻撃、ターン終了時にそれぞれ1秒の待ちが発生するようになりました。また、プレイヤーターン、エネミーターンに応じて、場にでているカードの攻撃可能枠が表示・非表示されています。

 

2.敵AIの修正

エネミーは一回のターンで1枚づつしか手札から場にカードをだしませんでした。そのため手札からコストと手札がある限りは場にカードを出せるように修正します。また、エネミーの攻撃も場に出ている1枚が攻撃するだけだったので、場にでている攻撃可能カード全てで攻撃するように修正します。

 

1)実施内容

・「GameManager」クラスの「EnemyTurn」メソッドで手札→場の処理をループ処理に変更。

・「GameManager」クラスの「EnemyTurn」メソッドでプレイヤーカードへの攻撃をループ処理に変更。

 

2)終了時点の状態

2ターン目で相手が攻撃可能になったタイミングでプレイヤー側のカードがまず破壊され、それでもまだ攻撃可能カードが残っているため、プレイヤー本体にも攻撃することでLOSE判定となっています。終了判定後にもタイマーが停止していないため、判定画面になっても裏では処理が続いてしまっていますね。

 

3.敵AIのアニメーション

エネミー側が攻撃した際は画面上で数値以外変化がないためあまりユーザーにはわかりません。そのため、ここではエネミーが攻撃した際にもカードを動かすようなアニメーションの処理を実装します。アニメーション処理についてはAssetの「dotween」を利用します。

 

1)実施内容

・AssetStoreから「dotween」をDLしてImport

・「CardMovement」クラスにコルーチンとして「MoveToField」「MoveToTarget」メソッドを追加する

・「MoveToField」メソッドでDOMOveをつかってカード移動のアニメーションを追加(目的場所への移動)

・「MoveToTarget」メソッドでDOMOveをつかってカード移動のアニメーションを追加(目的場所への移動と元の場所に戻る)

・「GameManager」クラスの「EnemyTurn」メソッドで手札→場の処理時を「MoveToField」メソッドCallに変更する

・「GameManager」クラスの「EnemyTurn」メソッドでカードへの攻撃および本体への移動処理時を「MoveToTarget」メソッドCallに変更する

 

2)終了時点の状態

エネミー側が手札から場にカードをセットする時、場のカードに攻撃するとき、本体へ攻撃するとき、それぞれでカードが移動するアニメーションが実装されました。ただし移動することによりカードの並び順が入れ替わったり、結果パネルの表示タイミング等の調整が必要となっています。

 

4.カードの並びを修正

手札や場にだされているカードは自動整列してしまうため、移動して元に戻った場合はその場所がズレて戻る仕様になっています。これではユーザーは入れ替わったようにみえてしまい分かりにくい状態なので、元の位置に戻れるように修正します。また、結果パネルの表示タイミングが速すぎるためカード移動後に結果パネルを表示するように修正します。

 

1)実施内容

・「CardMovement」クラスの「MoveToTarget」メソッドで処理前に並び順を取得し、処理後に並び順序を戻す処理を追加

・「GameManager」クラスの「CheckHroHP」メソッドをCallするタイミングを「ReduceCost」内のCallから「AttackToHero」Call後に変更

・「CardModel」クラスに「isPlayerCard」プロパティを追加し、プレイヤーのカードなのかを保持

 

2)終了時点の状態

修正したことでエネミーが場からカードを動かして戻す際に並び順がいれかわらなくなりました。また、プレイヤー同士の同士討ちについても制御されました。ゲーム終了時点のパネル表示についてもタイミング調整の結果、適正に表示されることになりました。

 

3)課題点

今回の修正した時点では各ターンのタイマーを5秒に設定していました。そしてエネミー側の攻撃がアニメーション化したことで1ターン内の画面上の動きが5秒に収まらなくなりました。その結果、相手が攻撃中にも強制的にターンENDされ処理が不必要に中断され画面上の制御がおかしくなりました。これがタイマーによる強制ENDと気づくまでデバッグを繰り返してやっときづいたのですが、相手ターン時はタイマーを停止しておく等の制御が必要となります。

 

参考サイト

本記事についてはほぼ「Unityゲームスタジオ スタジオしまづ」さまの動画を参考に作業しております。本記事を元に興味をもった方がおりましたら、YOUTUBEサイトのほうで「登録」されてはいかがでしょうか?

 

 

 


GoogleAdsense

<script data-ad-client="ca-pub-5019825310139846" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

GoogleAdsense

<script data-ad-client="ca-pub-5019825310139846" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

おすすめ記事

-IT, UNITY
-

Copyright© notebook , 2021 All Rights Reserved Powered by STINGER.