行動範囲を決める"Area"に関する再認識
最終更新:
30pin
-
view
'08/10/12
┼ 行動範囲を決める"Area"に関する再認識
概要
- AI の行動範囲を決める各種 Area に関して再確認する。
結論
- AINavigationModifier (青面)は建物が無い所で使っても良い。
- 建築物に必要な AINavigationModifier (青面)の形状は、建物を真上から俯瞰した際の各階の AINavigationModifier の和の形状で良い。
- 重ねて使う様に設計されていないと感じる。
ノウハウ資料
- 建物に使用するだけではありません
AINavigationModifier (青面)は「 ForbiddenArea (赤面)を通り抜ける為の通路」と考えると、この様な使い方も出来ます。
島にボートが衝突しない様に、島の周囲に ForbiddenArea (赤面)の帯を張っているが、AI を海から泳いで上陸させたい時など。
- 一般的な建築物に必要な AINavigationModifier (青面)の形状を探る
以下の様な建築物を作成した。
2F の床は透明になっている。
1F と 2F の奥、建物の外側に TagPoint を設置し、AI に巡回させてみた。
1F と 2F の奥、建物の外側に TagPoint を設置し、AI に巡回させてみた。
AINavigationModifier (青面)の影響は上下に渡って無限遠まで有効な為、建物を真上から俯瞰した際の各階の AINavigationModifier の和の形状1面で済んだ。
部屋内部の形状は各階で違う事があるが、行動の経路は AIPoint によって決まるので、問題は無い。それは、AI の行動経路が 1F と 2Fで変化している事からも判る。
- 少し複雑な建築物に必要な AINavigationModifier (青面)の形状を探る
通常 AINavigationModifier (青面)は ForbiddenArea (赤面)をくり抜く様にして使用するが、それでは上の階が下の階よりも面積が広い形の建物では使用する事が出来ない事になる。
しかし、この場合でも直方体モデルの時と同じ配置方法で対応できる事が判った。
しかし、この場合でも直方体モデルの時と同じ配置方法で対応できる事が判った。
以下の様な建築物を作成した。
4階建てで、2階がせり出している。また、内部にも階段を設置した。
この建物では各 TagPoint をランダムに巡回させた。
この建物では各 TagPoint をランダムに巡回させた。
1階の Entry/Exit と 2階の Waypoint が重なったり、 ForbiddenArea (赤面)が AINavigationModifier (青面)に飲み込まれてしまうなど、少し不安な形状ではあるが、実際には問題なく運用できている。
ForbiddenArea (赤面)で壁を認識させているはずなのに問題は無いのだろうか。
ForbiddenArea (赤面)で壁を認識させているはずなのに問題は無いのだろうか。
ここで、以下の2点がポイントとなる事が判った。
- AI が AIPoint 間のリンクを走っている時は、リンク外を全て壁とみなしていると考える。
- AINavigationModifier (青面)の中でも ForbiddenArea (赤面)は通行不可な場所と認識している。(リンク外である事が前提)
2. の例外として、AI と AIPoint との距離が近い場合、AI が AIPoint を発見してしまい、(たとえ ForbiddenArea (赤面)が間に有ったとしても)直線的に到達しようとする。当然、その間に物理的な壁等を設置していれば、AI は引っかかってしまう事になる。その様な現象が発生する場合は ForbiddenArea (赤面)の幅を広げる事で対応できる。
※ AI が AIPoint を発見する距離のパラメータは現在調査中
※ AI が AIPoint を発見する距離のパラメータは現在調査中
上記の関係を図にすると以下の様になる。
つまり、2階が ForbiddenArea (赤面)よりもせり出しているが、元々周りが壁だらけの迷路を走っている様なものなので、そこから飛び出して落ちる要因にはならない。(物理的な壁が有れば完璧だと思う)
また、AINavigationModifier (青面)が ForbiddenArea (赤面)を覆ってしまっても、即無力化してしまう訳では無いので、外から入ろうとして壁に引っかかる事も無い。(2. の例外には注意)
また、AINavigationModifier (青面)が ForbiddenArea (赤面)を覆ってしまっても、即無力化してしまう訳では無いので、外から入ろうとして壁に引っかかる事も無い。(2. の例外には注意)
- 出来るだけ重ねて使わない
ForbiddenBoundary (黄色線)と ForbiddenArea (赤面)、または同じもの同士が重なってはいけないが、AINavigationModifier (青面)も基本的には重ねては使えない。
もし、どうしても重ねる必要が有る場合は、プロパティの Height をお互いに設定する事で可能となる。
しかし、実験棟を作成して何回か試した結果、お互いが触れていなくても、同じ高度を共有している部分が有れば不具合が発生したり、お互いの AIPoint がリンク出来ないなど、建築物には不向きな様子でした。
どの様な使い道が有るのでしょうか。
- 最後に
AI の行動が不審であれば、View > ShowToolBox > User Cmds の ai_debugdraw=79 → ai_draw_path を実行すると AI の行動予定経路を見る事ができ、問題の分析に大いに役立つと思います。
いずれにしても、通行可能かどうかぐらいAIなんだから勝手に判断してくれよ と思うのであります。
┼ ┼