Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。0今回はUnityで主人公キャラを追いかけてくるサブキャラの作成をします。サブキャラにはNavMeshAgentを取りつけてNavMeshしたフィールド上を歩ける状態にしておきます。これに関しては前回の敵キャラをUnityのナビゲーション機能を使って移動させるUnityのナビゲーション機能を使って敵キャラクターを移動させます。ナビゲーション機能はあらかじめBakeされたフィールドを移動出来る機能です。21:14の記事でやりましたのでそちらを参考にしてください。正直なところ前回の内容の敵キャラが主人公を追いかけていくスクリプトと同じなんですが・・・・(^_^;)今回はそれ専用のスクリプトを作って、記述しますので、他の機能とごっちゃになることはないかと思います。スポンサーリンクサブキャラクターの準備と追いかけるスクリプトFollowCharaまずはサブキャラクターを用意し、アニメーターコントローラーをつけIdleとWalkの状態を作成してください。アニメーターコントローラで使うアニメーションパラメータはSpeedというパラメータのみになります。サブキャラにNavMeshAgentのコンポーネントを取りつけたら、新しいスクリプトFollowCharaを作成し取りつけます。このFollowCharaが主人公キャラを追いかける専用のスクリプトになります。UnityEngine.AI;というusingディレクティブを記述しておくといいです。1f;上のようなフィールドを宣言します。agentはNavMeshAgent、playerは主人公キャラクターをインスペクタで設定します。animatorはサブキャラのアニメーション制御で使います。();}Startメソッド内でコンポーネントの取得をします。次に追いかける部分の処理を作成します。agent.desiredVelocity.magnitude);}}agent.remainingDistanceで目的地とサブキャラとの距離を調べ、目的地(主人公)との距離agent.remainingDistanceがarrivedDistanceより下になったらagent.Stopでエージェントの動きを止めアニメーションをIdleにする為にアニメーションパラメータのSpeedを0fに設定します。目的地との距離がまだある場合でサブキャラと目的地の距離agent.remainingDistanceが追いかける距離followDistanceより大きい場合はアニメーションパラメータのSpeedをエージェントの速さに設定します。これで完成です!・・・というだけでは前回のを少し変更しただけになってしまいますので・・・(^_^;)サブキャラが主人公キャラの方を見る機能の追加サブキャラが到着している間はサブキャラが主人公キャラを見るようにしてみます。Passのチェックを入れると、呼び出されます。Vector3.Dotでサブキャラが向いている方向とプレイヤーの位置からサブキャラの位置を引いてプレイヤーキャラのいる方向とのベクトルの内積を求めます。反対方向なら-1が返ってきます。いう事は主人公キャラがサブキャラの見える範囲内180度以内の時にいれば正の値が、見えづらくなってきたあたりから負の値が返ってきます。それを利用して追いかけるキャラクターの方向を求めます。1.5f);animator.SetLookAtWeightでウエイトを指定します。第1引数は全体のウエイト、第2は体の関係度合い、第3は頭の関係度合い、第4は目の関係度合い、第5はモーションの制限で0は制限なしで1で完全に制限されます。ウエイトをさきほど計算したweightを設定します。weightが負の値だった場合はウエイトを0にして主人公キャラを見ないようにします。1.5f);で見るポイントを主人公に設定します。主人公の1.5mの高さの部分を見るようにしています。第5の引数がキャラクターのモーションの制限なので、ここを0.5にすると変に体が曲がってしまう事がなくなります。1.5f);}それではUnityの実行ボタンを押して試してみましょう。静止画像だけで追いかけてくるかどうかわかりません・・・。少年がガン付けられているようにしか見えませんね・・・。サブキャラ(実はmasasi君)が主人公キャラを追いかけてきて、到着状態の時は主人公キャラを見るようになりました。RPGのパーティの隊列を作る主人公キャラクターが一定の距離離れたら追いかけてくるサブキャラの作成が出来たので、RPGによくある主人公に付いてくる仲間たちを作りたいと思います。仲間たちはさきほど使った「masasi」君をコピーして名前をmasasi2、masasi3とします。↑のような感じで右から主人公、masasi、masasi2、masasi3となっています。怖い・・・・(^_^;)masasi、masasi2、masasi3にはFollowCharaスクリプトを作り取りつけます。それぞれにキャラクターのplayerに主人公を設定してしまうと隊列が出来ないので、playerには別のキャラクターを設定します。playerにはそれぞれmasasi→charamasasi2→masasimasasi3→masasi2に設定し追いかけるキャラクターを別々にし、数珠繋ぎのような感じで指定してあげます。これでうまく追いかけてくれるかUnityの実行ボタンを押して確認してみましょう。↑のように主人公が移動すると仲間が前の人間を追いかけるようになりました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。サイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事への質問はコメント欄にお願いいたします)。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。Д`)シクシク...お知らせ2020/01/18個人的にUnity2019.2.18f1をインストールしました。2020/01/01あけましておめでとうございます。(^^)/ユニティちゃんのRPGを作ってみようのPartyStatusスクリプトでpartyMembersのListの型がCharacterStatusとなっていたのでAllyStatusに変更しました。変更したというか、元々AllyStatusに書き換える前のスクリプトを掲載していたので修正しました。ユニティちゃんのRPGを作ってみよう10ーコマンド画面の作成とステータスの表示ーユニティちゃんのRPGでコマンド画面の作成とステータスコマンドを作成し、選択したキャラクターのステータスを表示するようにしていきます。20:00GetPartyStatusメソッドの戻り値もそれに伴って変更しています。2018/08/07コメント欄へのわたくしの返信は停止しております。わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。21:41も参照してみてください。コメントの返信はありませんが、回答は記事に反映されている可能性があります。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。Unityを使った3Dゲームの作り方(かめくめ).。