Unity で自動車の再現 (NavMesh + WayPoint)

こんにちは!
公私でバタバタしており、すっかり更新間隔が空いてしまいましたが、少しずつ実装を進めています。

今回は自動車を実装について紹介をします。

自動車アセットの購入

自動車をシミュレートする上で、自動車の 3D モデルが必要です。
今回は有料アセットを購入しました。
500 円ちょっとで完成品を購入できるのは本当にありがたいです。
TRAMCITY はローポリゴンで街を再現しているので、このクオリティがあれば十分です。

(自分でプリウスをモデリングしようとして挫折したのは内緒)

NavMesh + WayPoint の合わせ技

以前の記事で、自動車の運転(移動) には NavMesh を使っていることを紹介しました。
NavMesh だけで街中の自動車をシミュレートするのは難しいため "WayPoint" と呼ばれる手法を組み合わせています。

WayPoint は、自動車の移動経路に置かれている GameObject で、自動車はこの WayPoint を辿るように移動していきます。

下図はシミュレータのマップを上空から見たもので、車道に所々四角い箱が置かれています。

これらが “WayPoint” で、自動車は一番左の WayPoint で生み出されて、以後、自動車は自律的に(スクリプトによって) WayPoint を順番に辿っていきます。

自動車と WayPoint の接触判定 (衝突判定)

自動車と WayPoint の接触判定には Collier を使用しています。
元々自動車に実装されている Collider は物理接触用途に限定し、WayPoint との接触判定用に Collider を追加しました。

WayPoint は連結リストの要領で作られています。

WayPoint 自体が “NextPoint” という変数を持っていて、次にいくべき WayPoint を指し示しています。

自動車は自分が向かうべき Target を持っていて、自分の Collier と WayPoint の Collider とが接触したら、自動車は接触した WayPoint から NextPoint を受け取り、Target にセットします。

WayPoint の中には “NextPoint” を 2 つ持っている WayPoint もあり、分岐もできるようになっています。
2 つのうち、どちらの NextPoint に進むかはランダムにしています。

それぞれに重みをつけておくと、交差点の交通量をリアルに再現できそうです。

次回は、自動車と信号の実装について紹介します!

スポンサーリンク

Twitterでフォローしよう