ゲーム中で攻撃した敵を倒せるようにするには、一定の条件に達したら地面に倒れるアニメーションが発生するように設定するのがいいでしょう。
アクションゲームらしく敵を倒すことを考えるなら以下のような演出をするといいでしょう。
①HPを設定しておき、攻撃を受けるとHPが減るようにする
②HPが減っていき、HP0になったら地面に倒れこむアニメーションが発生する
③倒れた後にゲームシーンから消滅する
この流れが設定できればアクションゲームでおなじみの敵を倒すシーンを演出できるようになります。
この動画のように敵を攻撃して最後に倒す感じです。↓
前回の当たり判定を敵に実装した記事の動画と同じような動画ですが敵が倒れて消滅するところが違います…;
このブログでは前回までの記事でアニメーションや当たり判定の設定をしていました。
ですのでこれまでの記事の内容に上記①②③④の流れをプラスし敵を倒す演出方法を解説していきます。
最後まで読み終えるとUnityを使って3Dアクションゲームのバトルシーンが演出できるようになります。
Unityで倒れるアニメーション、HPを実装する概要と準備
こちらは前提としているUnity自体の設定を確認しておきます。
これまでの記事で何度も書いているので読み飛ばしていただいても構いません。
②使用するアセット
③アニメーターコントローラー
④前回作成したスクリプト
①Unityのバージョン、バックエンドの設定
Unityは以下のバージョンを使っています。
またInput Manager, Input System Package の新旧両方をのシステムを使うのでActive Input Handling をBoth にしてあります。
Unity Version 2021.1.16
Active Input Handling ➡Both
Active Input HandlingはメニューバーのEdit➡Project Settingから設定できます。
②使用するアセット
この記事内では以下のキャラクターをプレイヤー、敵として使用します。
③アニメーターコントローラーとその使い方
アニメーターコントローラーの使い方を知りたい方へ、基本的な使い方をこちらの記事にまとめておきました。
ステートのつなぎ方など参考にしていただければと思います。
④プレイヤーキャラクターを動かすスクリプト
プレイヤーキャラクターをアクションさせるスクリプトは以前作成した記事のこのスクリプトをもとに書いています。
Unityでキャラクターの攻撃アニメーションを作りたいんだけどどうすればいいのかな。 当たり判定、Collider(コライダー)っていうのを設定するって聞いたけどどうすればいいんだい? アクション[…]
Unityで倒れるアニメーション、HPを実装する手順概要
今回の作業手順の概要を軽く触れておきたいと思います。
その手順は冒頭でも書いた3つです。
①HPを設定しておき、攻撃を受けるとHPが減るようにする
②HPが減っていき、HP0になったら地面に倒れこむアニメーションが発生する
③倒れた後にゲームシーンから消滅する
敵SkeletonのHP設定 : HP100程度にする
プレイヤーキャラの攻撃力設定 : 30程度にする
4回剣で攻撃すれば倒せることになります。数値は何となく設定しました(笑)
敵SkeletonのHPが0になったら倒れるアニメーションを設定します。
アニメーターコントローラーを使用します。
Destroy関数を使って倒れた後にシーンから消滅させます。
Unityで倒れるアニメーション、HPを実装する:実践編
ではここから敵が倒れるアニメーション、敵のHPを設定していきましょう。
敵が倒れるアニメーション
アニメーターコントローラー内で画像のような設定をします。
倒れるアニメーション(ここではDeath)をプロジェクトウィンドウからドラッグして配置しておきます。
このとき同時にParametersでTriggerを作っておきましょう。
名前はDeathとしています。
被ダメージアニメーションから倒れるアニメーションにMakeTransitionでつなぎます。
この場合は Damage ➡ Death とつないでいます。
②で作っておいたベクトルを選択した状態で下方のConditionsに先ほど作ったTriggerのDeathを設定しておきます。
HPが0になったら倒れるアニメーションを発生させるようにします。
敵のHP
スクリプトで敵のHPを設定しておきます。
プレイヤーキャラクターのほうにも攻撃力の数値を設定します。
敵SkeletonのHP設定 : HP100程度にする
プレイヤーキャラの攻撃力設定 : 30程度にする
倒れた後にシーンから消滅する
スクリプトでDestroy関数を以下のように書いて敵が倒れた後に消滅するようにします。
Destroy(gameObject, 5f);
5f は5秒後にDestroyが機能するということです。
敵Skeletonの倒れるアニメーションが長いのでこのくらいの秒数にしてみました。
スクリプト全体は以下のようにしてみました。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SkeletonColTest : MonoBehaviour { private Animator animator; private Rigidbody rb; public int maxHP = 100; //HP100としてひとまず設定 private int hp; bool isDeath; private bool moveEnabled = true; private MeshRenderer mesh; void Start() { hp = maxHP; animator = GetComponent<Animator>(); rb = GetComponent<Rigidbody>(); } private void OnTriggerEnter(Collider other) //被ダメージに関する処理 { Damager damager = other.GetComponent<Damager>(); if (damager != null) { animator.SetTrigger("Gethit"); //プレイヤーの剣が当たったらダメージアニメーション発生 Damage(damager.damage); } } void Damage(int damage) //HPが0になったときの処理 { hp -= damage; if (hp <= 0) { hp = 0; animator.SetTrigger("Death"); Destroy(gameObject, 5f); //倒れた後にシーンから消滅させる } } }
これを敵キャラクターであるSkeletonに設定すると、この記事の冒頭のようになります。
プレイヤーが4回程度剣で攻撃した後に敵は地面に倒れます。
集団の敵として応用
この敵を走るようにしたものをシーンに複数配置してみました。
敵が倒れたのちに次々と消えていくので爽快感が味わえるかもしれまsん。
プレイヤーのほうもダメージを受けるようにしているので敵に囲まれると若干スリル感が出てきます。(笑)
Unityで敵が倒せるアニメーションが実装できると一気に面白さアップ!
今回は敵が倒れるアニメーション演出をしてみました。
敵が倒れる、消滅する、までできると戦っている感が一気にアップしますね。
まだ調整が必要な部分もありますがひとまず今回はここまでにしたいと思います。
普通の敵キャラが倒せるようになるとボスキャラなど配置してもいいですね。
普通の敵を全部倒した後にイベント発生、としても面白くなるでしょう。
ゲームの味付けとしてストーリーが作っていけるといいですね。