ものららい 2022/03/24 16:00

NPCとか


こんにちは🍎

前回は昨日の繋ぎこみを行ってそれっぽくなりましたが、今回はよりRPG感出るようにNPCについてちょっと作りこみをおこないました。(結構時間かかってしまったけど🐡)


一応ここではNPCは「構造的にはプレイヤーと同等」「自立移動する」「周りを認識するセンサーを持ってる」的なややアクション寄りの機能を持ったものを最終的に作成する予定なので、先ほどの内容を含めたものを作っていきます。

でも、RPG的なNPCって言うと移動しないで突っ立ってて会話だけできるみたいな店番してる店員みたいなのもいるじゃん!…と思うので、そういう「移動はしないけどでも何かしらのアクションはしたい」などのNPC未満のステージ上に存在する何らかのアクションをするオブジェクトは今後はStageEventとして扱っていきます。

平たく言うとこんな感じ。
StageNpc = プレイヤーと同等の機能を持つ自律的な動作をするオブジェクト
StageEvent = プレイヤーの操作に応じて何かしらのアクションを返すオブジェクト

一応将来的にはプレイヤーを追いかけたり等、もう少し複雑な動きしたりしてほしいですが、現状で使うかわからないような機能を作りこんでも良くないので、今回はあくまでRPGなどでもよくある汎用的な「目的に移動」と「ランダムに移動」に絞って作りました。

それだけでも実際動作させるとゲームっぽくなりますね🍎


「ランダムに移動」は移動先を自分の位置から適当に乱数で出せばいいので簡単ですが、「目的に移動」の方は自分で座標チェックして一つ一つ手付でやらない場合は何かしらの進路検索の機能が必要になってきます。

ただ、進路検索処理とかを自前でやろうとすると、実際とても大変(自分はやり方見当もつかない…)なので素直にunityの機能の一つであるNavigationを使用していきます。(せっかくUnity使ってるんだし

一応下記リンクで詳細わかりますがちょっと見にくいので「unity Navigation」とかで検索すると詳しく説明してるサイトとか結構あります。

Unity ユーザーマニュアル ナビゲーションと経路探索

簡単に説明すると、あらかじめNavigation Staticで設定された移動可能エリアをあらかじめ設定しておいて、障害物などを考慮した移動ルートをその都度自動的に出してくれるものです。


一応ナビゲーション使う前の準備がありますが簡単なのでさらっとご説明します。


まず移動する地形オブジェクトに対してNavigation Staticのチェックを入れます。


Navigationの設定パネルが出ていない場合は、Window → AI → Navigationにあります。


Navigationの設定パネルで一通り設定が完了したらBakeボタンを押すと画像と同じようにNavigation Staticの設定をした地形に青いエリアが出てきます。
この青いエリアがNavMeshAgentが移動できるエリアなので、途中途切れていたりしなければ基本的に問題なく目的地まで移動できます。

普通に使えば一筆書きにルートの上をなぞって進む感じで、設定次第で段差や谷などをジャンプして飛び越えたように移動するのも簡単でにできるのでとてもいい機能ですが、…今回は自前の移動システムとのあれこれがあって素直に使用できなので、開始、終点座標からルート座標配列を取得する処理を作ってそれを元に座標を順にたどるように移動処理を行って動かしています。

一応ですが、今回の使い方はあまりいい使い方とは言えない感じの結構カオスな実装してるので、ちゃんと理解したい方はちゃんと説明しているサイトを見て実装するのをお勧めします。
もうちょい素直に使えそうな感じになったらそっちに移行するかもですが、現状しばらくはとりあえずこの方式で行きたいと思います。

今回用意したNavigationの進路検索だけ使用する機能。
Script/BaseSystem/Static/RootNavigation.cs


NPCのリアクションと進路移動の動画。


おまけで進行ルートにミスがあったときにルート再検索して難を逃れる動画。


次回は自動で進行するイベントみたいなのを着手したいですが、微妙に会話のシステムとバッティングしそうなのでちょっと考え中…。


実際動作するアセットフォルダも置いておきますので、アセットフォルダを空プロジェクトに入れれば確認できます。

2022_03_24_Assets.zip (511.22kB)

ダウンロード

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

最新の記事

記事のタグから探す

月別アーカイブ

記事を検索