マニュアル: 視野・視界(SightRange)の扱い方

概要

視野・視界(SightRange)とは、オブジェクトの視界に入った時に襲いかかってくる敵などを実現するためのシステムです。「壁の裏にいる相手は発見できない」といった設定をすることもできます。
オブジェクトの視野・視界を設定する 「SightRange」 ノードと視界に入ったかどうかを判定する実行条件 「他のオブジェクトを発見(TargetSighted)」 を組み合わせて利用します。

技術的な概要

SightRangeノードの原点より、ポリゴンの形状に応じた形でレイキャストを行います。レイキャストと対象のオブジェクトの[CollisionShape2D]が接触したかどうかで判定を行います。

SightRangeノードについて

視界の細かな設定を行うSightRangeノードと視界の形状を設定するCollisionPolygon2Dの2つで動作します。
image

SightRangeノードの設定項目

  • 視界の形状
    プリセットの形状である円形、四角形、カプセル型から視界の形状を設定することができます、「作成」ボタンを押すと、子ノードのCollisionPolygon2Dの形状を上書きします。
  • 反復頻度(iteration)
    視界判定を行う頻度(レイキャストを行う頻度)を指定します。通常はデフォルト値の5で問題ありませんが、高い値を設定することでより緻密な計算を行ったり、低い値を設定することで負荷を下げることができます。
  • 壁を無視(detect_behind_cover)
    他のオブジェクトの壁判定を無視することができるようになります。後述の障害物レイヤーで細かな設定を行うことができます。
  • 表示方向に応じて回転(follow_direction)
    視界がオブジェクトの表示方向に応じて回転するようになります。
  • 障害物レイヤー(obstacle_layer)
    障害物=視界を遮るコリジョンレイヤーを指定します。各オブジェクトのCollisionShape2Dやタイルのコリジョン設定に応じます。

SightRangeノードのその他の重要プロパティ

  • CollisionObject2D>コリジョン
    視界自体のコリジョンレイヤー/マスクを設定できますので、攻撃判定/あたり判定と同様に視界に発見されるオブジェクト/されないオブジェクトを詳細に設定できます。

CollisionPolygon2D

このノードはGodot標準のポリゴン生成用ノードです。
頂点の数や場所を自由に変更できるため、視野の大きさを変えるだけではなく、自由変形で扇形の視界や複雑な形状の視界を設定することが可能です。

条件「他のオブジェクトを発見(TargetSighted)」について

発見する側のオブジェクトに設定する条件です。
視野に特定のグループや指定のオブジェクトが入った際にTRUEとなり遷移が実行されます。

「他のオブジェクトを発見(TargetSighted)」の設定項目

  • 対象のSightRange
    判定を行うSightRangeノードを指定します。
  • すべてのレイヤーを対象
    チェックを行うと、SightRangeの設定にかかわらずすべてのコリジョンレイヤーを対象とします。
  • 対象の種類
    グループかオブジェクトを指定できます。