【Blaze AI Engine】③敵AIに魔法攻撃を実装する

今回は、Blaze AI Engineを使って作成した敵AIに魔法攻撃を実装したいと思います。

過去の記事にて攻撃機能の実装まで行っていましたが、現状だとパンチとキックしか出来ないので魔法攻撃も放てるようにしてみます。

スポンサーリンク

【Blaze AI Engine】③敵AIに魔法攻撃を実装する

魔法攻撃用アニメーションの準備

まずは、敵が魔法攻撃を発動する際のアニメーションを用意します。

こんな感じのモーションですね。手を振りかざす際にアニメーションイベントを発動させて魔法攻撃を放つようにします。

Warrior Controllerの修正

Warrior Controllerの修正

敵AIに設定されているアニメーターコントローラー「Warrior Controller」を開いて新たなステート「Fire」を追加します。

Fireを選択して先ほど決めたモーションをインスペクターから設定します。

モーションの設定

この時に指定するモーションは元のアニメーションをコピーしたものを指定するようにしましょう。

元のアニメーションを設定してしまうと、アニメーションの編集の際に「Read-Only」となり編集できない事がありますので。

攻撃用エフェクトの準備

このままだと手を振りかざすだけですので、魔法攻撃用のエフェクトを用意しましょう。この辺はお好みでエフェクトを用意してもらえれば良いと思います。

私は、Polygon Arsenalに含まれている「SlashSpinThinBlue」のカラーを赤色にしたものを使うことにします。

使用するエフェクトが決まったらプレハブ化しておきましょう。

敵AIインスペクターの修正

続いて敵AIのインスペクターから「Attack State Behaviour」の設定を修正します。

敵AIインスペクターの修正

魔法攻撃を放ちたいので、近距離ではなく多少離れた所から攻撃するようにAttack Distanceの値を「5」に変更します。

攻撃パターンは現状パンチとキックでしたが、それらを削除してFireを追加します。パンチとキックも有効にしておきたい場合はそのまま残しておくと良いでしょう。

今回は、テストとして分かりやすいように魔法攻撃のみにしてみます。

スクリプトの作成

敵AIにアタッチする「Fireeffect」スクリプトを作成します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Fireeffect : MonoBehaviour
{
[SerializeField]
private GameObject FirePrefab;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void FireShot()
{
// 魔法攻撃用プレハブをインスタンス化
var FireInstance = Instantiate<GameObject>(FirePrefab, transform.position + new Vector3(0f,1f,0f), Quaternion.Euler(-90, 0, 0));
//(transform.position+transform.upでもOK)
// 方向を指定
FireInstance.GetComponent<FireMove>().SetDirection(transform.forward);
}
}
view raw Fireeffect hosted with ❤ by GitHub

FireShot関数が呼ばれたら魔法攻撃用プレハブをインスタンス化します。

第2引数と第3引数は私と同じように設定する必要はありません。お好みの位置と角度でインスタンス化するようにしてください。

このスクリプトは保存したら敵オブジェクトにアタッチしておきます。

インスペクターから魔法攻撃エフェクトのプレハブをセットします。

続いて、エフェクトのプレハブにアタッチする「FireMove」スクリプトを作成します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FireMove : MonoBehaviour
{
// 飛んでいく方向
private Vector3 direction;
// 飛ばす力
[SerializeField]
private float power;
private Rigidbody rigid;
void Start()
{
rigid = GetComponent<Rigidbody>();
}
void Update()
{
}
//方向を設定
public void SetDirection(Vector3 direction)
{
this.direction = direction;
}
//力を加えて飛ばす
void FixedUpdate()
{
rigid.AddForce(direction * power);
}
}
view raw FireMove hosted with ❤ by GitHub

今回は、AddForceを使用するのでエフェクトプレハブにRigidbodyコンポーネントを設定します。

Use Gravityのチェックを外しておきましょう。チェックが入ったままだと重力に従いぐんぐんエフェクトが下に落ちてしまいます。

スクリプトをプレハブにアタッチしたらインスペクターからPowerの値を50にします。

アニメーションイベントの作成

最後に、アニメーションイベントを作成しましょう。

敵モデルのアニメーションウィンドウを開きます。

魔法攻撃用モーションを選択してエフェクトを発動させたいタイミングで右クリックして「Add Animation Event」を選択します。

アニメーションイベントの設定

そして、Functionに先ほど作成したFireeffectにある「FireShot()」を呼び出すようにします。

ここまで出来たらゲームを実行してみます。

 

使用するエフェクトによって異なりますが、このエフェクトは発動したらすぐに消えてしまうので、パーティクルシステムのLoopingにはチェックを入れています。

とりあえずこんな感じで、魔法攻撃が出来るようになります。

著者プロフィール
うんくん

IT系に特化した記事がメインです。(Unity多め。)
Udemy講師もやっています。よろしくお願いします。

※Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。

うんくんをフォローする
アセット
スポンサーリンク
シェアする
うんくんをフォローする