【Unity】プレイヤーは攻撃時以外は移動出来るようにする

かなり久々のUnityのゲーム開発記事になってしまいました。

なかなかUnityを開いて作業する時間がなかったので更新が滞っていましたが、まだまだ実装できそうな要素がたくさんあるので、ぼちぼちと進めていきます。

今回は、ユニティちゃんがダメージを受けた際のアニメーションの設定からユニティちゃん(プレイヤー)の移動する条件を決めたいと思います。

スポンサーリンク

【Unity】プレイヤーは攻撃時以外は移動出来るようにする

現状プレイヤーも敵も、移動や攻撃アニメーションは実装していますがお互い攻撃を受けた際のアニメーションが発生しませんので、まずはダメージアニメーションを追加します。

ユニティちゃんのダメージアニメーションの設定

ダメージアニメーション

Any Stateの中にDamageを作成します。パラメーターはTriggerで「Damage」にします。

ダメージアニメーションの設定②

Any StateからDamageのConditionsは「Damage」にしてDamageからExitは上の画像のように変更します。

Statusmanagerスクリプトの修正

Statusmanagerスクリプト

新たにDamageというステートを作成します。それに伴いDamageメソッドも多少修正しています。

要は、ダメージが発生した際にSetTriggerを利用してダメージアニメーションを発動するだけです。

プレイヤーの移動処理を記述しているスクリプトの修正

プレイヤースクリプト

プレイヤーの移動条件に、アニメーションステートがDamageの場合でも移動出来るようにします。

この処理を加えないと、敵から攻撃を受けている最中にダメージアニメーションが無限ループしてユニティちゃんが動かなくなってしまう場合があります。

この現象は、ユニティちゃんが攻撃中に敵からの攻撃を受けてアタックアニメーションの再生途中でダメージアニメーションに移行した際に発生します。

AttackスクリプトにあるAttackEndメソッドは、ユニティちゃんの攻撃アニメーションのイベントにて実行されます。

途中で敵からの攻撃を受けてダメージアニメーションに切り替わってしまうと、本来Normalステートに移行するはずが、以降せずにAttackの状態のままになってしまうので、ユニティちゃんが動かなくなってしまいます。

敵は、プレイヤー側をひたすら攻撃する仕様ですので、ダメージアニメーションが実質無限ループしてしまう状態になるわけです。

実はダメージアニメーション再生後にアニメーションイベントからGoToNormalメソッドを呼び出すだけで良い

ここまでの説明を聞いて分かる人もいると思いますが、ユニティちゃんのダメージアニメーションが再生された直後にStatusmanagerスクリプトにあるGoToNormalメソッドを呼び出せば良いんです。

GoToNormal

これならば、新たにステートを作成しなくてもStatusmanagerスクリプトにある54行目のトリガーの記述だけ追記すればOKです。

これで、攻撃時以外では移動できるようになりました。敵から攻撃を受けた際にダメージアニメーションがループすることもありませんね。