UnityのCarWaypointBasedを使って車を自動運転させる

UnityのスタンダードアセットのVehiclesにあるCarプレハブを使うと車を運転する事が出来ました。

UnityのスタンダードアセットのVehiclesにあるCarの設定を見ていき、実際に車で地面の上を走ってみます。

今回はCarWaypointBasedを使って、車を自動運転させてみようと思います。

CarWaypointBasedを使うと、指定したポイントを自動で周っていく自動運転の車を作成する事が出来ます。

レースゲームの敵の車の作成や、ゲーム内で自動で移動する車の作成をする時に便利ですね!

スポンサーリンク

CarWaypointBasedの配置

CarWaypointBasedはAssets→StandardAssets→Vehicles→Car→Prefabsにあります。

いくつかのスクリプトはCarプレハブと同じなので、説明は割愛させて頂きます。

CarAIControl

CarAIControlは車の自動運転をする為のスクリプトです。

CarAIControlスクリプト

CautiousSpeedFactorは注意を払うべき時の車のスピードの調整パーセンテージです。
CautiousMaxAngleは注意を払うべき時の車のコーナーへの侵入の最大角度です。
CautiousMaxDistanceは注意を払うべき時までの最大距離。
CautiousAngularVelocityFactorは加速時の車の回転に対する値?
SteerSensitivityはAIのステアリングの入力が、どの程度敏感に反応するかどうか
AccelSensitivityはAIがアクセルを踏んだ時に、どの程度敏感に反応するかどうか
BrakeSensitivityはAIがブレーキを踏んだ時に、どの程度敏感に反応するかどうか
LateralWanderDistanceはターゲットからどの程度離れてさまようかどうか
LateralWanderSpeedはターゲット付近をさまよっている時のスピード
AccelWanderAmountはターゲット付近でさまよっている時の加速
AccelWanderSpeedはターゲット付近でさまよっている時の加速のスピード
BrakeConditionはNeverBrakeでブレーキを使わない、TargetDirectionDeferrenceでターゲットの方向に向けてブレーキをかける、TargetDistanceはターゲットの方向にかかわらず距離でブレーキを使います。
Drivingのチェックを外すと運転を停止します。
Targetは車のWaypointTargetObjectを指定します。
StopWhenTargetReachedにチェックを入れると(最後の?)ターゲットの位置に来たら停止します。
ReachTargetThresholdはStopWhenTargetReachedにチェックを入れた時のターゲットとの距離を指定します。

WaypointProgressTracker

WaypointProgressTrackerスクリプトは移動ルートの先読みや周回数等を記録するみたいです。

Circuitには移動ポイントを管理するWaypointCircuitスクリプトを指定します(WaypointCircuitについては後述します)。
LookAheadForTargetOffsetはターゲットルートのオフセット値
LookAheadForTargetFactorは現在の速度に応じて目的地までの距離を前方に乗算する値
LookAheadForSpeedOffsetは速度調整の為のオフセット値
LookAheadForSpeedFactorは速度調整の為の経路に沿って前方に乗算する値
ProgressStyleはSmoothAlongRouteはルートに沿ってスムーズに位置を更新、PointToPointは到達点に達した時だけ更新します。
PointToPointThresholdはProgressStyleにPointToPointにした時の、到達点に達したとするしきい値。
TargetにはCarWaypointBasedの子要素のHelpersの子のWaypointTargetObjectを指定します。

正直なところ、スクリプトのコメントをGoogle翻訳しただけなのでよくわかりません・・・・。

Waypointの作成

CarWaypointBasedの設定を見てきたので、次は車が移動するポイントを作成していきます。

まずは空のゲームオブジェクトを作成し、名前をWayPointとします。

WaypointにはAddComponentからScripts→UnityStandardAssets.Utility→WaypointCircuitを取り付けます。

WaypointCircuitのインスペクタ

↑のような感じになります。

次にWaypointの子要素に車が移動するポイントを空のゲームオブジェクトで作成していきます。

移動ポイントの作成

↑のように移動するポイントを順番にWaypoint1~Waypoint4まで作成しました。

Waypointは空のゲームオブジェクトの名前を変えただけなので、シーンビューで確認する時に不便です。

そこでWaypointにアイコンを付けて、シーンビューで確認しやすくします。

Waypointのインスペクタで左上をクリックし、アイコンを変更します。

ゲームオブジェクトにアイコンを設定する

↑のようにWaypointにアイコンを設定しました。

実際にシーンビューを見てみると、

シーンビューでWaypointのアイコンが表示された

↑のように青いアイコンでWaypointが表示されました。

Waypoint1からWaypoint4へ向けて自動運転させます。

ここまで作成したら、WaypointCircuitスクリプトのAssign using all child objectsボタンを押します。

移動ポイントが追加された

↑のようにWayPointゲームオブジェクトの子要素のゲームオブジェクトを、移動ポイントとして登録が完了します。

その後、下のAuto Rename numerically from this orderボタンを押すと、

移動ポイントの名前が自動で変わる

↑のように移動ポイントに設定したゲームオブジェクトの名前を自動で変更します。

このボタンを使うと移動ポイントの名前をそれぞれTestやWaypoint、Idoupoinnt等としていてもリネームしてくれます。

WaypointCircuitスクリプトのSmoothRouteにチェックを入れると移動の2点間のルートをスムーズに計算します。
EditorVisualizationSubstepsはシーンビューで表示するルートのステップ数?

CarWaypointBasedで車を自動運転してみる

CarWaypointBasedの設定値を見て、移動ポイントであるWaypointの設置も終わったので実際に車を自動運転させてみましょう。

↑のようになりました。

見事に移動ポイントを順々に周っていってます!

これは便利だ・・・・(^-^)

スポンサーリンク

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

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