Bot Navigation for Counter-Strike:Source:jp

From Valve Developer Community
Jump to: navigation, search
English

BOTナビゲーション

はじめに

ナビゲーションメッシュはマップの"歩くことができるエリア(walkable area)"を表現します。このデータはCounter-Strike:SourceのBotや人質がどのように環境内を動けばいいか"知る"のに必須になります。

ナビゲーションメッシュのデータはマップファイル(.bsp)と対応している.navファイルに保存されます。 例えば、cstrike\maps\de_dust.bspのナビゲーションメッシュはcstrike\maps\de_dust.navに保存されています。


ナビゲーションメッシュ自動生成

多くのコミュニティで作られたマップをサポートするために、Counter-Strike:Sourceには自動メッシュ生成システムが含まれています。カスタムマップを初めてBOTとプレイするときに、生成システムがマップのための.navファイルを作ります。これにはマップの大きさと複雑さによって数分から数時間かかります。大抵のマップでは大体.navファイルを自動生成するのに5分かかります。生成が完了すると、.navファイルは将来の使用のためにハードディスクに保存されます。


生成時に何が計算されるのか

ナビゲーションメッシュ生成の間に以下のステップが実行されます:


  • プレイヤーのspawn地点から開始し、連続した歩くことができるポイントを探し、歩くことができる空間をその地点から"flood-filling(塗りつぶし)"で外側にサンプルしていきます。
  • サンプルのデータから長方形のナビゲーションエリアが作成されます。
  • 隠れられる場所、スナイパースポットが計算されます。
  • Encounter Spot(遭遇スポット)とApproach Point(アプローチポイント)が計算されます(これにはしばらく時間がかかるかもしれません)
  • 最初の遭遇エリアが計算されます

生成プロセスの手動開始方法

生成プロセスを手動で開始するには、コンソールでnav_generateと入力してください。


ナビゲーションメッシュの閲覧

結果のナビゲーションメッシュを見るにはコンソールでnav_edit 1と入力してください。メッシュ編集をオフにするにはnav_edit 0と入力してください。


歩くことができる場所の明示的なマーキング (あるいは: "階段の上にメッシュがない")

マップの中には急な階段、傾斜、丘があり、生成システムが混乱して、結果としてナビゲーションメッシュがマップ全体をカバーできないことがあります。これを解決するには、手動で追加のwalkable marker(歩くことのできる場所マーカー)を配置して、生成するときのサンプリング段階でこのポイントから外側にサーチするようにすることができます。

walkable markerを追加していくには、マップの歩くことができるポイントを狙え、それからコンソールでnav_mark_walkableを入力します。マーカーの配置が終わったら、nav_generateを入力してメッシュを再生成します。


テスト用のメッシュを素早く生成するには

生成における分析フェーズはとても時間がかかる可能性があります。これを飛ばすにはコンソールでnav_quicksave 1と入力してください。


注意: この"Quicksave"は分析フェーズを飛ばすため、結果のメッシュはCS BOTと人質の高レベルのプランニングと注意システムに必要な重要なデータを欠いたものになります。それなのでこれはナビゲーションメッシュのテスト、編集、調整には適していますが、外部にnavファイルを公開する前には完全な分析(つまり:nav_quicksave 0にした状態)を行うことを忘れないでください

ナビゲーションメッシュの編集

de_dustでナビゲーションメッシュエディタをオンにした状態

自動でのナビゲーションメッシュ生成もそれなりに働き、カスタムマップでのBotや人質の使用開始を簡単にしています。

しかしながら、注意深く手でナビゲーションメッシュを調整するとBotのパフォーマンスが目に見えて向上する可能性があります。さらに、メッシュに手動で場所名を追加するとBotがどこでイベントが起こったかを伝え、Counter-Strikeレーダーを増強し、全てのラジオメッセージに場所名を追加します。


ナビゲーションメッシュエディタ

エディタをオンにするにはコンソールでnav_edit 1を入力します。(オフにするにはnav_edit 0を入力)


  • 視点の真ん中にある白い十字がカーソルです。
  • カーソルで差しているナビゲーションエリアが選択中のエリアで黄色の枠が表示されます。
  • 選択中のエリアから到達できるナビゲーションエリアは赤で表示されます。
  • 選択中のエリアの白い線はnav_splitコマンドを実行したときに分割に使われる線です。

エリア種類

ジャンプエリア(Jump area) (緑のXでマークしてあります)はBOTに接続した高いエリアに到達するにはジャンプする必要があることと、このエリアは隠れたりスナイパースポットとしては使えないことを伝えます。
しゃがみエリア(Crouch areas) (青い対角線上の線でマーク)ではこのエリアを通り抜けるBOTを強制的にしゃがませます。

接続関係の種類

双方向接続 (エリアの縁の明るい青のラインでマーク)ではBOTは2つのエリア間を自由に動くことが出来ます。
一方通行接続 (暗い青のラインでマーク)は通常高いところから地面に飛び降りるところで使われます。これはBOTに飛び降りることはできるが、上に飛んで戻ることはできないことを伝えます。 一方通行接続はBOTをある方向だけに強制的に進ませたり、トリッキーなジャンプを設定するのにも役立ちます。

メッシュ編集コマンドの使用

全てのメッシュ編集コマンドはコンソールから入力して使うこともできるのですが、実際のところこれらのコマンドをキーにバインドした方がずっと使いやすいです。例えば、bind del nav_deleteはDeleteキーにnav_deleteコマンドをバインドします。このバインドを行った後では、Deleteキーを押すとカーソルの下にあるナビゲーションエリアが削除されます(ナビゲーション編集モードにいる場合)。

CFGファイルを使うことで一度にたくさんのコマンドを一時的にバインドすることができます。これはたくさんのコマンドがあり、しかもこのバインドをキーに永久に適用したいわけではない、ナビゲーション編集に役立ちます。 既成のファイルとその使い方の説明はEditing Bot Navigation CFG Fileにあります。

Botナビゲーションに関連したコマンド全てのリストについてはナビゲーションメッシュコンソールコマンドリファレンス を参照してください。


メッシュ編集の基本コマンド

保存(Save)

現在のところ、ナビゲーションメッシュ編集システムには"undo"コマンドはありません。 そのためnav_saveコマンドで頻繁に保存することが非常に重要です。


分割(Split)

エリアを2つの隣り合うエリアに分割するには、エリアにカーソルを向けてnav_splitコマンドを実行します。 分割前 分割後


マージ(Merge)

2つの隣接するエリアを1つにマージするには:


  1. 1つ目のエリアにカーソルを向け、nav_markを実行
  2. 2つ目のエリアにカーソルを向け、nav_mergeを実行

マージを行う場合両方のエリアの端の長さが同じである必要があることに注意してください。

1つ目のエリアをマーク 2つ目のエリアにカーソルを向ける マージ完了

結果のエリアは元となった2つのエリアの全ての接続関係を保持し、マークされたエリアから属性(例:場所名など)を引き継ぎます。


接合(Splice)

接合を行うと、既にある2つのエリアの間に新しいエリアを作成します。接合は強力なツールであり、下の例のように傾斜した場所においてエリアを簡単に作成したりできます。

2つのエリアの間の場所に新しいエリアを接合で作るには:


  1. 1つ目のエリアにカーソルを向け、nav_markを実行
  2. 2つ目のエリアにカーソルを向けnav_spliceを実行

1つ目のエリアをマーク 2つ目のエリアにカーソルを向ける 2つのエリアを接合するエリアが作成


削除(Delete)

エリアを削除するには、カーソルを向けて、nav_deleteを実行します。


新しいエリアの作成

新しいエリアを手動で作成するには:


  1. カーソルを新しく作成したいエリアの隅になる場所に向けます
  2. nav_begin_areaを実行します
  3. カーソルを動かしてエリアの範囲を決めます
  4. nav_end_areaを実行します

最初の隅からエリア設定開始 エリア範囲を設定中 新しいエリアが作成


エリア間の接続関係の追加と削除

エリア間の接続関係は行為者が1つのエリアから他のエリアに動くことができるかどうかを定義します。通常の接続関係は双方向で、行為者は自由にエリア間を行き来できます。しかし、接続関係には一方通行も存在し、高い崖から飛び降りることはできるが、飛び上がって戻ることができないといった関係を示しています。

エリアAからエリアBへの一方通行接続を作成するには(エリアAからエリアBには移動可能):


  1. エリアAにカーソルを向けます
  2. nav_markでエリアAをマークします
  3. エリアBにカーソルを向けます
  4. nav_connectを実行します

双方向接続を作るには、AとBの役割を逆にして上のステップを繰り返してください。

エリアAとエリアBの接続関係を全て削除するには:


  1. エリアAにカーソルを向けます
  2. nav_markでエリアAをマークします
  3. エリアBにカーソルを向けます
  4. nav_disconnectを実行します

場所名(Place Names)の追加

マップ内の区画を示す場所名をエリアに設定することができます。例えば、マップの中に目立つ家があるなら、その家の中にある全てのナビゲーションエリアに"House"という場所名をタグ付けすることができます。

場所名は以下のように使われています。CS Botのチャットシステムは自分のいる場所を宣言するのに使います。レーダーはプレイヤーの現在位置を示します。テキストチャットやラジオコマンドでもプレイヤー名の後ろに場所名が表示されます。

"場所名ペイントモード(Place Painting Mode)"への切り替えを行うには、nav_toggle_place_modeを実行してください(nav_editがすでに"1"に設定されていると仮定しています)。

使用できる場所名リストを表示するにはnav_place_listを実行してください。

nav_use_place (場所名)を入力して使用する場所名を選択します。その場所名を設定したいエリアにカーソルを向けて、nav_toggle_place_paintingを実行します。 "場所名ペイント(place painting)"が実行中の間は、カーソルでエリアを指すとそのエリア現在の場所名が設定されます。場所名ペイントモードを終わるには、もう一度nav_toggle_place_paintingを実行します。

選択(picking)、塗りつぶし(flood-filling)、置き換え(replacing)といったいくつかの追加コマンドがあります。これらのコマンドについては #Place Name Commandsを参照してください。


よくあるナビゲーションメッシュ問題と解決方法

階段とスロープの外側のエリア

自動生成システムはよく階段やランプの端にぶら下がるエリアを作成してしまいます。これらは削除して、BOTが階段やスロープをまっすぐ使うようにさせるべきです。


手すり

現在のBOTナビゲーションシステムにおいて手すりは問題になることがあります。飛び降りるというものも含み、手すりを越える接続関係はそれが必須でなければ避けるべきです。BOTは最終的には飛び降りるジャンプをすることになりますが、その過程はエレガントなものではありません。


過剰なジャンプの防止

nav_no_jumpフラグを使うのはこの場合です。


回転ドアの処理

回転ドアの余裕のためにナビゲーションメッシュの中に空き空間を切り出しましょう。


編集の応用テクニック

梯子

登ることができる表面に対して手動で梯子設定をすることができます。そうした表面にカーソルを向けると、カーソルは緑になります。

nav_build_ladderの使用

梯子の設定をする簡単な方法は、登ることができる表面をカーソルで指して、nav_build_ladderを実行することです。

登ることができる表面をカーソルで指す

梯子設定完了

nav_begin_areanav_end_areaの使用

nav_build_ladderが必要ではない場合、以下のように手動で梯子の設定をすることができます:


  1. 新しい梯子の隅となる部分にカーソルを向けます
  2. nav_begin_areaを実行します
  3. カーソルを動かして梯子範囲を設定します
  4. nav_end_areaを実行します

これはBOTに梯子を登らせて、途中で木箱の上に飛び降りさせるといった場合に役立ちます:

梯子の最初の隅から設定開始 梯子範囲の決定 梯子設定完了

梯子の反転

時には梯子が間違った方向を向いた状態で作成されることがあります。もし梯子が赤で描画されていたら、裏側から見ていることになります。緑の梯子は自分に表面を向けています。梯子の向きを変えるには、梯子にカーソルを向けてnav_ladder_flipを使用してください。

壁を向いた梯子(間違い) 壁に背を向けた梯子(正しい)


障害物回避と精密移動

nav_precisenav_walknav_stopを使ってローカルエリアの障害物回避行動を無効にし、BOTの行動をコントロールできます。


避けるエリアをマーク

nav_avoidを使うことでBOTに通常のエリアが危険すぎるということでない限りこのエリアを避けるように指示できます。


BOTの隠れ場所のコントロール

nav_no_hideを使うことでBOTがこのエリアに隠れることを防ぐことができます。 (分析フェーズで強制的に隠れる場所を作成させるには)


トリッキージャンプと狭い通路の調整

特定の経路を通るようにナビゲーションエリアをアレンジします。


  • BOTがドアや窓の端にひっかかっている場合、ナビゲーションエリアの端を削って、ドアや窓の開いた箇所の真ん中を通るパス作ります。
  • BOTがジャンプを試みる最高点は58ユニットです。もしジャンプの最高点が底から59ユニット以上の高さなら、BOTはジャンプしてすぐあきらめます。このあきらめる動作が実際にはジャンプできる場所で起きるのなら、nav_corner_lowerを使って上側のナビゲーションエリアを少し下げてください。

しゃがみジャンプの最高到達点

参照

ナビゲーションメッシュコンソールコマンドリファレンス(日本語訳)

Official forums for the bot system.