Unityで主人公を追いかける仲間キャラクターを作成する

記事内に広告が含まれています。

今回はUnityで主人公キャラを追いかけてくるサブキャラの作成をします。

サブキャラにはNavMeshAgentを取りつけてNavMeshしたフィールド上を歩ける状態にしておきます。

これに関しては前回の

敵キャラをUnityのナビゲーション機能を使って移動させる
Unityのナビゲーション機能を使って敵キャラクターを移動させます。ナビゲーション機能はあらかじめBakeされたフィールドを移動出来る機能です。

の記事でやりましたのでそちらを参考にしてください。

正直なところ前回の内容の敵キャラが主人公を追いかけていくスクリプトと同じなんですが・・・・(^_^;)

今回はそれ専用のスクリプトを作って、記述しますので、他の機能とごっちゃになることはないかと思います。

スポンサーリンク

サブキャラクターの準備と追いかけるスクリプトFollowChara

まずはサブキャラクターを用意し、アニメーターコントローラーをつけIdleとWalkの状態を作成してください。

アニメーターコントローラで使うアニメーションパラメータはSpeedというパラメータのみになります。

サブキャラにNavMeshAgentのコンポーネントを取りつけたら、新しいスクリプトFollowCharaを作成し取りつけます。

このFollowCharaが主人公キャラを追いかける専用のスクリプトになります。

Unity5.5バージョン?以降でC#でスクリプトを組んでいる場合は

using UnityEngine.AI;

というusingディレクティブを記述しておくといいです。

上のようなフィールドを宣言します。

agentはNavMeshAgent、playerは主人公キャラクターをインスペクタで設定します。

animatorはサブキャラのアニメーション制御で使います。

Startメソッド内でコンポーネントの取得をします。

次に追いかける部分の処理を作成します。

agent.remainingDistanceで目的地とサブキャラとの距離を調べ、目的地(主人公)との距離agent.remainingDistanceがarrivedDistanceより下になったらagent.Stopでエージェントの動きを止めアニメーションをIdleにする為にアニメーションパラメータのSpeedを0fに設定します。

目的地との距離がまだある場合でサブキャラと目的地の距離agent.remainingDistanceが追いかける距離followDistanceより大きい場合はアニメーションパラメータのSpeedをエージェントの速さに設定します。

これで完成です!

・・・というだけでは前回のを少し変更しただけになってしまいますので・・・(^_^;)

サブキャラが主人公キャラの方を見る機能の追加

サブキャラが到着している間はサブキャラが主人公キャラを見るようにしてみます。

OnAnimatorIKは特別なメソッドで、アニメーターコントローラーのレイヤーの設定でIK Passのチェックを入れると、呼び出されます。

まずはVector3.Dotでサブキャラが向いている方向とプレイヤーの位置からサブキャラの位置を引いてプレイヤーキャラのいる方向とのベクトルの内積を求めます。

ベクトルの内積とはなんぞや!?と思った方も多いと思いますが、サブキャラの向いている方向の単位ベクトル(長さが1のベクトル)と主人公キャラのいる方向の単位ベクトルが完全に同じなら1、
反対方向なら-1が返ってきます。

という事は主人公キャラがサブキャラの見える範囲内180度以内の時にいれば正の値が、見えづらくなってきたあたりから負の値が返ってきます。

それを利用して追いかけるキャラクターの方向を求めます。

animator.SetLookAtWeightでウエイトを指定します。

第1引数は全体のウエイト、第2は体の関係度合い、第3は頭の関係度合い、第4は目の関係度合い、第5はモーションの制限で0は制限なしで1で完全に制限されます。

とりあえずウエイトをさきほど計算したweightを設定します。

weightが負の値だった場合はウエイトを0にして主人公キャラを見ないようにします。

で見るポイントを主人公に設定します。主人公キャラの基点は足元になっていますので、Vector3.upでY方向に1.5をかけ、
主人公の1.5mの高さの部分を見るようにしています。

第5の引数がキャラクターのモーションの制限なので、ここを0.5にすると変に体が曲がってしまう事がなくなります。
このパラメータを使えばさきほどのスクリプトのようにDot関数を使う必要もなくすっきり出来ます

それではUnityの実行ボタンを押して試してみましょう。

チェイス5

静止画像だけで追いかけてくるかどうかわかりません・・・。
少年がガン付けられているようにしか見えませんね・・・。

とにかくサブキャラ(実はmasasi君)が主人公キャラを追いかけてきて、到着状態の時は主人公キャラを見るようになりました。

RPGのパーティの隊列を作る

主人公キャラクターが一定の距離離れたら追いかけてくるサブキャラの作成が出来たので、RPGによくある主人公に付いてくる仲間たちを作りたいと思います。

仲間キャラクターをコピーする

仲間たちはさきほど使った「masasi」君をコピーして名前をmasasi2、masasi3とします。

主人公を含めたパーティー

↑のような感じで右から主人公、masasi、masasi2、masasi3となっています。
ちょっと怖い・・・・(^_^;)

masasi、masasi2、masasi3にはFollowCharaスクリプトを作り取りつけます。

それぞれにキャラクターのplayerに主人公を設定してしまうと隊列が出来ないので、playerには別のキャラクターを設定します。

playerにはそれぞれ

masasi→chara
masasi2→masasi
masasi3→masasi2

に設定し追いかけるキャラクターを別々にし、数珠繋ぎのような感じで指定してあげます。

これでうまく追いかけてくれるかUnityの実行ボタンを押して確認してみましょう。

パーティの隊列機能が出来たかどうかの確認

↑のように主人公が移動すると仲間が前の人間を追いかけるようになりました。
怖いお兄ちゃんに追いかけられるどころか、軍人さんたちに追いかけられる少年に変わりました・・・・((+_+))

タイトルとURLをコピーしました