敵にダメージを与えた時、部位によってアニメーションを変える | Unityを使った3Dゲームの作り方(かめくめ)

敵にダメージを与えた時、部位によってアニメーションを変える

今回は、主人公の攻撃で敵がダメージを受けた時に攻撃を受けた個所によってアニメーションを変更してみます。

アニメーションを変えるだけでなく、与えるダメージの変更機能も同じように追加する事が出来ます。

今回の機能を追加する前に

Unityの敵キャラの当たり判定を細かくして、部位毎に攻撃出来るようにしていきます。

の記事のように部位によって当たり判定を分けておく必要があります。

スポンサーリンク

当たり判定に使うコライダを設定する

当たり判定に使うコライダを設定します。

敵に細かく当たり判定を取り付けた階層

上のように部位ごとに空のゲームオブジェクトを作成しHit部位の名前をつけます。それぞれのHit~にはコライダを取り付けます。

モーション1

今回は上のように当たり判定のコライダを用意しました。

アニメーターコントローラでダメージアニメーションを変更する

次は敵キャラのアニメーターコントローラーを修正します。

敵にDamageLeftとDamageRight状態を設定する

上のようにDamage、DamegeRight、DamageLeftを作成します。

Damageは元々あるダメージを受けた時の処理です。

アニメーションパラメータにDamageRightとDamageLeftをTriggerとして作成し、AnyStateからDamegeRight、DamageLeftにTransitionを繋げます。DamageRight、DamageLeftがそれぞれOnになった時に状態遷移するように条件に設定します。

その後に、DamageRight、DamageLeftからIdleにMakeTransitionで遷移を繋げ、条件はなしで、HasExitTimeにチェックを入れます。

Has Exit Timeにチェックが入っているので、アニメーションの再生が終わればIdleに遷移します。

DamageRightとDamageLeftに設定するアニメーションクリップはまったく別物を準備してもいいのですが、例えば体の右側をのけ反るアニメーションがあったならば、それをDamageRightに設定し、DamageLeftにも同じアニメーションを設定して、

モーション5

上のようにMirrorにチェックを入れます。

そうするとDamageRightに設定したアニメーションとは反対のアニメーションになります。

左右対称のアニメーションにしたい場合はMirrorにチェックを入れれば簡単に出来ます。

これでアニメーターコントローラの修正は終了です。

ダメージ処理メソッド内でダメージアニメーションを振り分ける

次は敵に銃弾が当たった時の処理を修正します。

敵のダメージを受けた時の処理を修正

敵に銃弾が当たった時の処理は敵キャラに設定しているEnemyスクリプトのTakeDamageメソッドで、そこで状態変更メソッドSetStateメソッドを呼び出し、アニメーションパラメータのDamageをトリガーしていました。

ここのDamage部分をダメージを受けたコライダのゲームオブジェクト名で判断し分岐させます。

SetStateメソッド内を変更する前にSetStateメソッドを呼び出しているTakeDamageメソッドを変更します。

TakeDamageメソッドの第3引数にTransform型のcolTransformを追加します。第3引数に何も渡されなかった時はnullが設定されます。

colTransformは攻撃を受けたコライダのTransform情報を渡します。

SetStateメソッドの呼び出しで第2引数にcolTransformを渡します。

SetStateメソッド内を修正していきます。

EnemyState.Damageの時でSetStateの第2引数で受け取ったTransformのHit~という名前でアニメーションパラメータのトリガーするものを変更しています。

EnemyState.Deadの時はResetTriggerを使ってダメージのトリガーをリセットします。

遠距離攻撃スクリプトの修正

銃を撃った時等に敵の操作スクリプトのTakeDamageメソッドを呼んでいるのでその部分を修正します。

今までの記事をご覧いただいている方はShotスクリプトのJudgeShotメソッド内のTakeDamageメソッドを呼んでいる場所です。

敵の操作スクリプトのTakeDamageメソッドを呼んでいる部分で第3引数にヒットしたコライダのTransformを渡しています。

近接攻撃スクリプトの修正

剣などの近接攻撃スクリプトの修正をしていきます。

以前の記事で作ったAttackSwordスクリプトを修正します。

剣が当たった敵のコライダのTransformをTakeDamageの第3引数に渡しています。

近接攻撃でもアニメーションを分ける場合

近接攻撃でもアニメーションを分ける場合はAttackSwordのOnTriggerEnterメソッドで、

SetStateメソッドDeadの修正

最後にEnemyスクリプトのSetStateメソッドのDeadの時の処理を修正します。

Dead状態になったらDamage系のトリガーをリセットする処理を追加します。

終わりに

出来上がったのでUnityの実行ボタンを押して確認してみましょう。

モーション6

当たった部位によって敵のダメージアニメーションが変更されました。

今回は3パターンですが、右手と右足をわけたり、前からと後ろからの攻撃でも分けたりと細かく作り込む事も出来ます。

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます