【UE5】Mass AIでTrafficシステムを動かしてみる - Part1 表示するまで
- はじめに
- プロジェクトはこちら
- 1. Vehicleテンプレートで新しいプロジェクトを作成する
- 2. City Sampleから必要なプラグインを移行する
- 3. プロジェクトを開き必要なプラグインを有効化
- 4. Project Settings -> Engine -> Zone Graph でセットアップ
- 5. Actorクラスを継承したブループリントを作成
- 6. Mass Entity Config Asset構造体を継承した Data Asset を作成
- 7. 6番で作成したData Assetをセットアップ
- 8. レベルにZone Shapeアクターを追加する
- 9. Zone Shapeを配置する
- 10. ツールバー -> Build -> Build Zone Graph をクリックする
- 11. レベルにMass Spawnerアクターを追加する
- 12. 動作確認
はじめに
おおまかな流れはMass AIを動かしてみる - Part1と同じ
このページの工程が完了すると、次のような結果が得られる。
ブログ用 pic.twitter.com/5ni3CWjFsq
— PavilionDV7 (@Dv7Pavilion) May 19, 2022
続きのPart 2はこちら。
【UE5】Mass AIでTrafficシステムを動かしてみる - Part2 車両を出す - PavilionDV7の雑多なやつ
プロジェクトはこちら
Part 2の最後にプロジェクトのダウンロードURLを貼ったのでそちらからダウンロードする。
1. Vehicleテンプレートで新しいプロジェクトを作成する
2. City Sampleから必要なプラグインを移行する
- .uprojectがあるフォルダに直接[Pluginsフォルダ]を作成
- 「直接」=エクスプローラーからフォルダを新規作成すること
- エディタからフォルダを作成してもPluginとして認識されないので注意
- City Sampleの同じくPluginsフォルダから3つのプラグインを自身で作成したPluginsフォルダにコピペする
- AnimToTexture
- RuleProcessor
- Traffic
City Sampleが手元に無い、もしくはダウンロード出来るほど空き容量が無い場合、上の「プロジェクトはこちら」で配布しているプロジェクトの中に必要なプラグインが同梱されているので、そちらからコピペしても良い。
3. プロジェクトを開き必要なプラグインを有効化
- Mass AI
- Mass Crowd
- Mass Entity
- Mass Gameplay
- Zone Graph
- Zone Graph Annotations
- Traffic
一覧の中にTrafficが無ければプラグイン移行に失敗しているので再度手順を確認する。 有効後プロジェクトを再起動。
4. Project Settings -> Engine -> Zone Graph でセットアップ
Lane Profile の作成。名前は[↑↓400]とし、2つのレーンを作成する。それぞれDirectionを[Forward]と[Backward]に設定しWidthは[400]とする。
上矢印は全角で「zk」、下矢印は全角で「zj」と打てば変換出来る。自分はGoogle日本語入力を使用しているが他のIMEではできないかもしれない。
Tags で2つのタグ名を定義する。それぞれ[Vehicle]、[Intersection]とする。 セットアップ終了時点でこのようになる。
5. Actorクラスを継承したブループリントを作成
名前を[BP_Low_Res_Vehicle]とする
Default Scene Rootの子として[Cone]を追加。ConeのLocationを[X:0, Y:0, Z:60]にする。
6. Mass Entity Config Asset構造体を継承した Data Asset を作成
Content Browser で右クリック -> Miscellaneous -> Data Asset
一覧から[Mass Entity Config Asset]を選択。
作成したData Assetの名前を[VehicleEntityConfig]とする。
7. 6番で作成したData Assetをセットアップ
Traitsを3つ追加しそれぞれ
- LOD Collector
- Traffic Vehicle Visualization
- Traffic Vehicle Simulation
を追加する。
[Traffic Vehicle Visualization]を展開し、[Low Res Template Actor]に[BP_Low_Res_Vehicle]を指定。 [Params -> LOD Representation]を展開しHigh、Midium、Lowの全てに[Low Res Spawned Actor]を指定する。
この時点でStatic Mesh Instance DescやTraffic Vehicle Simulationトレイトについては触れる必要はない。
8. レベルにZone Shapeアクターを追加する
T字路、カーブ、直線の3つの道路パーツを作成する。
最初にT字路を作る。上部のツールバーからZone Shapeアクターを追加する。
名前を[Intersection]に変更する。
座標を[X:0.0 Y:0.0 Z:0.0]に移動。詳細パネルの[Zone -> Shape Type]を[Polygon]に変更。続いて[Tags]に[Vehicle、Intersection]を指定する。2つのTagを設定すると枠内に伸びる矢印の色が変わるはず。
Zone Shapeを構成するポリゴンのポイント(頂点)の内、いずれかのポイントを選択し[Selected Points -> Type] を[Lane Profile]に変更する。
もう片方のポイントも同様に設定する。 設定が終わると画像のように「ねじれ」が発生する。
「ねじれ」を修正するためにはポイント付近にある[黒矢印]を[枠線内に向かう]ように各ポイントを回転させてあげれば解決する。 画像内の青枠はわかりやすくするために画像編集ソフトで後付したもの。実際のエディタでは枠が見づらいので頑張るしかない。(頑張れ)
この修正方法はポイントが3点、4点になっても同じ。枠の外を向いているポイントがあれば枠内に向くように回転させる。
Zone Shapeの枠の内、1つを選択し右クリックから[Add Point Here]を選択する。(自分はエディタの言語を「英語」にしている。「日本語」の場合はどのような表記になっているか不明)
新しく追加されたポイントを選択し、Positionを[X:0, Y:400, Z:0]に変更。続いてTypeを[Lane Profile]に変更する。「ねじれ」が発生しているので、先程の要領で修正する。(黒矢印を枠内に向ける)
各ポイントの位置を次の画像のように修正する。
- X軸方向 : [X:800, Y:0, Z:0]
- -X軸方向: [X:-800, Y:0, Z:0]
- Y軸方向: [X:0, Y:800, Z:0]
同じ要領で空いた枠にもポイントを追加すると十字路を作ることが出来る。(今回は必要ないので割愛)
「カーブ」を作成する。 先程作成した[Intersection]を複製し、名前を[Curve]に変更する。座標を[X:0.0 Y:0.0 Z:0.0]に移動する。
「Curve」を選択し[-X軸側]のポイントを削除する。
これでカーブが得られる。
「直線」を作成する。 上部のツールバーからZone Shapeアクターを追加する。名前を[Road]にする。座標を[X:0.0 Y:0.0 Z:0.0]に移動。
詳細パネルの[Tags]に[Vehicle]を指定する。
Roadの長さは配置時に調整する。
9. Zone Shapeを配置する
8番で作成した道路パーツを以下の数だけ揃える。
- Intersection x 2
- Curve x 4
- Road x 7
各パーツを以下に示すLocationとRotationに設定する。
- Intersection
- Location X:0, Y:-3000, Z:0
- Rotation X:0, Y:0, Z:0
- Intersection2
- Location X:0, Y:3000, Z:0
- Rotation X:0, Y:0, Z:180
- Curve
- Location X:-4000, Y:-3000, Z:0
- Rotation X:0, Y:0, Z:0
- Curve2
- Location X:4000, Y:-3000, Z:0
- Rotation X:0, Y:0, Z:90
- Curve3
- Location X:4000, Y:3000, Z:0
- Rotation X:0, Y:0, Z:180
- Curve4
- Location X:-4000, Y:3000, Z:0
- Rotation X:0, Y:0, Z:270
- Road
- Location X:-2000.0, Y:-3000, Z:0
- Rotation X:0, Y:0, Z:0
- Road2
- Location X:2000.0, Y:-3000, Z:0
- Rotation X:0, Y:0, Z:0
- Road3
- Location X:-2000.0, Y:3000, Z:0
- Rotation X:0, Y:0, Z:0
- Road4
- Location X:-2000.0, Y:3000, Z:0
- Rotation X:0, Y:0, Z:0
- Road5
- Location X:0, Y:0, Z:0
- Rotation X:0, Y:0, Z:90
- Road6
- Location X:0, Y:0, Z:0
- Rotation X:0, Y:0, Z:90
- Road7
- Location X:0, Y:0, Z:0
- Rotation X:0, Y:0, Z:90
10. ツールバー -> Build -> Build Zone Graph をクリックする
Zone Graphをビルドすると次のような結果が得られる。
Roadのスプラインのポイント位置を調整し他のIntersectionやCurveと接続する。 再び[Build Zone Graph]をクリックすると次のような結果が得られる。
他のZone Shapeと接続するとき各枠はできるだけぴったりと重なるように配置する。オーバーでも寸足らずでもレーン同士は接続していないと判断され、車両がスタックしてしまう。
[Project Settings -> Zone Graph -> Build Settings]にはレーン同士を接続する最大角度やスナップ距離、スナップ角度等が設定出来るので、多少大雑把に配置したい場合はこの辺の数値をいじってみると良いかもしれない。
11. レベルにMass Spawnerアクターを追加する
Mass Spawnerの座標はどこでも良い。
追加したMass Spawnerアクターを選択し、Mass プロパティをセットアップする。 Count に生成したいエージェントの数を[10]と指定。 Entity Typesの+ボタンを押し、追加された要素を展開。Entity Configに6番で作成したData Assetを指定する。
Spawn Data Generatorsの+ボタンを押す。Generator Instance に[Mass Traffic Vehicle Spawn Data Generator]を指定。 Generator Instanceを展開し[Vehicle Type Spacing]の+ボタンを押す。更に展開し次の画像のように各パラメータを設定する。
それ以外のDefault SpaceやRandom Seed等は触らなくてよし。
12. 動作確認
プレイしエージェントがスポーンされているか確認する。 画像は「シミュレーション」で実行し、Zone Shape内にきちんとスポーンされていることを確認している。