忍者ブログ

方向音痴のSkyrim

PCゲーム「Skyrim」の雑多なCKいじり日記

Navmesh

Navmesh


↑各ツールのショートカット(よく使いそうな操作を抜粋)

Ctrl+E:Navemesh編集モードのON/OFF

V:頂点 の選択をON/OFF
G:辺の選択をON/OFF
T:面の選択をON/OFF
A:3点を選択時、面を貼る
W:押すごとに3つのNavmeshビューモードを切り替える
D:選択解除
R:選択中のものを削除する。Deleteキーでも消せる
F:選択した頂点を地面、もしくは直下のオブジェクトの上に落とす
Q:選択した複数の点をマージ(最初に選択した頂点にマージされる)
S:選択した辺のフリップ
O:選択した面の水底設定ON/OFF。NPCにそこが水場であることを知らせる
P:選択した面のPreferred Path設定ON/OFF。優先的に使わせたい経路を示す(街道など)
P:選択中した隣り合う辺同士を接続(ジャンプして飛び降りさせる設定)
E:選択したエッジのカバー設定ウィンドウを開く
Ctrl+F:面をIndexから検索するウィンドウを開く。Navmeshのエラーチェックもできる
Ctrl+1:ファイナライズ
Ctrl+2:カバーの自動設定

ドラッグ操作で範囲選択可能



【Navmeshとは】
プレイヤーは視覚情報から目的地までの経路を割り出し、障害物を避けながら到達することができます。しかしNPCにはそれができません。そんな彼らに歩ける場所を教えるのが、三角形の板が繋がってできたNavmeshです。
NPCはNavmesh上でしか動けません。何らかの理由でNavmeshのない場所に放りだされてしまったら、そこで永遠に棒立ちになります。


【Navmeshを敷く】
最初は、面、辺、頂点の全てが選択可能な状態になっています。Navmeshを敷く時は、面と辺の選択はOFFにして点のみ選択できるようにすると、作業がしやすいです。
Navmeshはある程度地形に沿って敷かれていれば、多少地面から浮いたり潜ったりしても大丈夫のようです。例えば階段は段々にNavmeshを敷く必要はなく、スロープ状に敷けます。
NPCに足を下ろせる場所を教えるものなので、基本的に90度以上のような極端な傾斜のNavmeshを敷くのは避けます。

Navmeshを自動生成(Navemshの編集モードに入って操作します)
  1. ファイルメニューより「Navmesh > Generation > Recast Based Generation」
  2. Recast Navmesh Generationウィンドウが開くので、そのままOKボタンを押す
  3. Navmeshが自動生成される。細かいところは手作業で修正していく(場合によっては自動生成よりも、ゼロから手作業のほうが効率よかったりします)

Navemshを手作業で敷く
  1. 敷きたい場所にカーソルを持っていき、右クリックで新しい頂点を置く(辺を選択中に右クリックすると、辺を頂点で分割できる)
  2. Ctrlキーを押しながら右クリックして2つ目の頂点を置く(2点が選択された状態になる)
  3. 2点を選択している状態でCtrlキーを押しながら3つ目の頂点を置くと、面を自動的に敷ける。3点を選択してからAキーを押しても面を敷ける。

【屋内セルの編集】
既存のセルを改装するだけならば、移動用の扉などのすぐ前にある黄緑色の面は必要がない限り壊さないように作業します。間違えて壊した場合、張り直すよりも編集前のデータをロードしてやり直したほうが安全です。

【屋外セルの編集】
オープンなだけに編集ミスで隣接セルに意図しない変更が加わることがあるので、屋内よりも慎重に作業します。

屋外は一定の大きさのセルで碁盤の目のように分けられており、Navmeshはセルごとに編集していきます。Nキーを押すと隣接セルのNavmeshの表示/非表示を切り替えられます。
セルとセルの接続部分は緑の太線で表されます。緑の太線で繋がってないところはNPCは地続きと認識できないので、避けて通ろうとします。接続部分はうっかり壊してしまうことも多いので、作業前のデータをバックアップしておきます。意図せず接続を壊してしまったら、接続を作り直すのではなく、作業前のデータをロードしたほうが安全です。

隣接セルとの接続を作りたいときは、セルのぎりぎり端まで頂点を寄せ、隣接セルの頂点とほぼ同じ位置にくるようにします(境界上で同じ長さの辺同士があわさる感じ)。互いの頂点の位置が適切であれば、ファイナライズで自動接続されます。


飛び降り設定
上と下にある2本の辺を選択してPキーを押すと、NPCがジャンプして下に飛び降りられる設定が作れます。



設定ができるとピンク色の壁が表示されます。


【カバーの設定】
Navmeshの外周に位置する辺を、ここではエッジと呼んで記述していきます。
カバーは、エッジに設定する「壁」に相当します。NPCに「このエッジの向こうにはこれだけの高さの遮蔽物がある」「下への段差がある」などを知らせる情報です。デフォルトでは「Open」が設定されています。Openなエッジ付近では、NPCはアバウトな動き方をするようです。適切なカバーを設定することで、NPCの動作がよりよくなることもあります。民家など戦闘が起きない場所ではカバーが設定されていないことも多いのですが、屋外やダンジョン内ではきちんと設定されています。戦闘で遮蔽物を認識させるのに必要らしいです。

ファイルメニューより「Navmesh > Draw Cover」でカバーの表示をON/OFFできます。
カバーを編集するときは、Draw CoverをOFFにします。

Coverを手作業で設定
設定はエッジを選択して、Eキーを押すか、ツールから「Edit cover for edge」を選びます。


壁の高さ、もしくは下への段差「Ledge Cover」を決めます。それぞれ高さにあわせた青い壁で表示されます。柱や非常に高い壁には「Max Cover」が適しています。Maxの壁は白で表示されます。目安として人型種族の身長は、種族関係なく「128 units」に決められています。
「Wall With No Cover」は使われているところを見ないような気がします。遮蔽物にならない壁(鉄格子とか)のことかもしれません。
またエッジの端に表示される黒い壁は端がOpenであることを示しているらしいのですが、デフォルトでは自動で設定されるので特に気にしなくて大丈夫みたいです。

Coverを自動で設定
「Ctrl+2」のショートカットか、ツール一覧から「Find cover edges for current cell」を押すだけ。細かい部分は手作業で補完。


このような梯子を設置した場合、カバーなしだとNPCは「梯子の裏側から前に周って登る」という経路をうまく取れないことが多いです(経路がうまくとれないと瞬間移動が頻繁に起こります)。カバーを適切に設定してやることで、梯子の裏をうまく避けて2階へ上がる経路を取れるようになります。上の例では壁の高さを設定しましたが、「Ledge Cover」のほうがより適切かもしれません。これだと、梯子を遮蔽物と認識させずにすみます。牢屋の鉄格子がある所(リフテン牢獄)も、このカバーが使われています。


【Navmeshのエラーチェック】
Navemeshが一通り敷けたら、「Ctrl+F」のショートカットか、ツールから「Find triangle」を押します。


Form IDやTriangle Indexを空欄にして、「Check NavMesh」ボタンを押します。エラーがなければ「No Warnings Found」と出るのでOKします。
エラーがあるとひとつずつ場所と原因を警告で出してきます。「はい」を押して確認するか、キャンセルします。最後に「エラーが出た面を全て削除するか?」と聞いてくるので、「いいえ」を選択。「Next Warning」ボタンを押すと、エラーの出たところを順にチェックでき,
「Delete Warning Triangle」ボタンで確認しながら削除することができます。
Navmeshは、折りたたむことはできません。折りたたまれて重なっている部分はエラーをたくさん出します。



Navmeshは基本的に1枚です。分割されていてもポータルなどで必ず別セルとの接続が存在し、まわりまわればスカイリムに広大なNavmeshが1枚だけ敷かれていることになります。どことも繋がっていない孤立したNavmeshは「ISLAND」と呼ばれます。特別な理由がない限り、ISLANDなNavmeshを敷くことは無いかと思います。


【Navmeshのテスト】
動線確認を行います。
ツールから「Test navmesh」を押します。


「Set Pathing Test Attributes」というウィンドウが開くので、「Choose Actor」から適切なActorを選びます。多くの場合は人型種族で動線確認できればいいので、アワビ(Abelone)さんを選択すればいいでしょう。
うまく選択できていたら、Test RadiusやTest Heightに人型種族の設定値が自動で入ります。
この状態で「Display Overlay」ボタンを押します。



このように、移動可能領域がNavmeshの内側に、少し浮いた位置で表示されます。
Navmeshが敷いてあっても、幅が狭すぎてNPCが上手に通れない場所が一目で分かります。上の例だと、左奥の椅子あたりが狭くなって紫の領域が届いていません。紫の領域が行き渡っていないと、ワープ移動が頻繁に起こったり、目標に到達できなかったりするようです。
梯子など傾斜がきつい所は紫の領域が通らないことがありますが、ゲーム内で確認すればちゃんと通れる場合もあります。
Navmesh全体に動線が行き渡るよう心がけつつ、ゲーム内での動作確認結果と合わせてNPCに優しいNavmeshを敷いてあげるといいかと思います。動作確認はフォロワーを使うと便利です。


【ファイナライズ】
セルとセルをテレポート用の扉などでつないだ場合は、ファイナライズでそれぞれのセルの移動ポイントとなる面同士を接続します。移動元と移動先の両方でファイナライズが必要になります。接続の設定がされた面は、黄緑色で示されます。NPCはこの黄緑の場所に立ってから移動を行います。
屋外セルでは、隣接するセルとの接続もファイナライズで行います。セルの境界上で隣接セルのNavmeshの頂点と編集中セルのNavmeshの頂点が重なるようにします。Navmeshがうまく敷けていれば、ファイナライズによって緑の太線で接続されます。



その他の操作

【Navmeshの切り取り】

宝箱がややこしい位置で配置された部屋に、ごく簡単なNavmeshを敷きました。
もちろんこのままでは、NPCが宝箱に引っかかってうまく歩けません。
Navmeshのツールには、選択したオブジェクトに従ってNavmeshを切り取ってくれる機能があります。



一度Navmesh編集モードを抜け、Navmeshを切り取りたいオブジェクトを選択します。この例では、宝箱全てを選択しました。
この状態で再度Navmesh編集モードに入り、ツールの「Cut selected object」を押します。


 
このように、ボタンひとつでかなり正確にNavmeshを切り取ることができます。
あとは頂点をマージしたり移動させたりなどして、細かい部分を修正するだけ。
Navmeshの自動生成と同じく、場合によっては手作業でオブジェクトを避けて敷くほうが早かったりします。


【Navmeshの一時変更】
オブジェクトのCollisionCubeの設定に、「L_NAVCUT」があります。


Navmeshを敷き詰めた場所に、切り取りたい部分だけCollisionCubeを置きました。



各CollisionCubeにてCollision layerを「L_NAVCUT」に設定します。
これでNPCはCollisionCubeを置いた場所を避けて歩くようになります。
この方法はカジートキャラバンのテントや、内戦クエストでのカタパルト設置などで使われています。
オブジェクトと一緒にこのCollisionCubeをenable、disableすることで、一時的にNavmeshを変えることができます。
PR

Author

UNI
Skyrimで遊ぶのも、CKで改造するのも好きなファンタジー好きです。
戦闘苦手で難易度は基本EASY、慣れてもNORMAL程度。 アンデッド恐怖症なので、ノルド遺跡探索が辛い……。

ブログ内検索

最新コメント

[09/24 ひばりのスヴェン]
[09/21 ブレトン魔術師]
[09/19 ふぇりす]
[09/15 こんばんは!]
[09/09 NONAME]