Unityで主人公についてくるキャラクターを作成する

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

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

これに関しては前回の

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

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

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

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

スポンサーリンク

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

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

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

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

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

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

using UnityEngine.AI;

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

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

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

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

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

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

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

目的地との距離がまだある場合はアニメーションパラメータをエージェントの速さに設定します。

サブキャラが主人公キャラに到着していた場合は、エージェントの目的地(主人公)との距離がfollowDistanceより上になったらagent.Resumeでエージェントが再び動きだすようにします。

これで完成です!

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

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

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

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

ではスクリプトを見ていきます。

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

ベクトルの内積とはなんぞや!?と思った方も多いと思いますが・・・わたしにもようわかりません。

簡単に言うと、サブキャラの向いている方向と主人公キャラのいる方向が完全に同じなら1、
反対方向なら-1が返ってきます。

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

それを利用して、その値をweightに入れます。

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の実行ボタンを押して確認してみましょう。

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

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

スポンサーリンク

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

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