【Unity】モンスト風ゲームを作る その3 ターン制編

【Unityの練習ゲーム作り 第二弾!】

大人気アプリ モンスト風のゲームを、Unityの練習で作ってみます。

その1 大まかな設計を考えました
その2 自キャラの動きを実装しました

今回は 敵キャラを追加し、自ターン,敵ターンを作ってみます。

敵キャラの追加

自キャラが攻撃を加える敵キャラを、画面に追加します。

当たり判定を追加して、完成。

攻撃、HP管理

  • 自キャラが敵にあたったときに、敵のHPを減少させる
  • 敵の攻撃によって、自キャラのHPを減少させる

をコードに追加していきます。

●自キャラ:

セクションごとに見ていきます。


自キャラのHP(hp)と攻撃力(attack)を新変数として追加しました。


敵に衝突したときに、敵のHPを減少させます。

自キャラと敵キャラの衝突判定は、void OnCollisionEnter2D(Collision2D other)で実現されます。

衝突したときの、オブジェクトが「敵」である判定は タブ(="Enemy")で実施しています。

敵キャラのHPを管理する関数に、自キャラの攻撃力(attack)を与えています。


HP管理です。

外部関数からアクセス可能にするため、publicです。与えられた値によって、自身のHPが変化します。

敵からの攻撃、回復アイテムによる回復を想定しています。

●敵キャラ:

中身は、自キャラと同じですので説明は割愛します。

ターン制

モンストでは 自キャラと敵キャラのターンが、交互に繰り返されます。

「自分のターンでしか、自キャラが動けない」をコードに書いていきます。

●自キャラ

随分長くなってしまいました…。

追加部分を見ていきます。


ターン管理用に、新しくbool変数を導入。


自キャラの発射関数の呼び出し条件を変更しています。

characterTurn が Trueかつ、移動していないときのみ呼び出せるようになっています。


新しく追加したターン終了を管理するセクションです。

↑元からある、自キャラの速度を徐々に落としていく処理です。

自キャラの速度は限りなく0に近づくものの、決して0にはなりません。(※正確には、コンピュータ処理では表現できる桁数に限りがあるので、時間をかければ見かけ上0にすることは可能です。)

そこで、自キャラの移動速度が一定値以下になったとき、強制的にスピードを0にしています(4行目)。

その後、自身の characterTurn を falseにし、GameManager にターンが終了したことを伝えています。


外部から、characterTurnを変更させるセッターです。

●敵キャラ

自キャラと構成は同じです。

●ゲームマネージャー

ターンを切り替える turnControl を持っています。

GameManager を介さずとも ターン切替は可能です。

しかしキャラが増えたときや、HPがゼロになった場合にオブジェクトそのものがなくなることが想定されるため、GameManager を使用しています。

試しに動かしてみます。

自キャラが敵に衝突するたびに、敵のHPが減っています。

また自キャラが動いている最中は、操作を受け付けません。


今回はここまで!

ターン処理は結構面倒ですね…。ターン処理用のアセット等 あるのかな?

次回はキャラ数を増やしてみます。