Version: 2022.2
言語: 日本語
public static bool Raycast (Vector3 sourcePosition, Vector3 targetPosition, out AI.NavMeshHit hit, int areaMask);

パラメーター

sourcePosition レイの始点
targetPosition レイの終点
hit レイを飛ばしてヒットしたオブジェクトのプロパティー情報
areaMask レイを飛ばす時、特定のマスクをかけるためにナビメッシュレイヤーを渡すことができる

戻り値

bool ターゲット位置に辿りつく前に終点となる場合は true、そうでない場合は false

説明

ナビメッシュ上の二点間でレイを飛ばします

レイが始点から目標に向かってトレースされるとき、Source と Destination の点が NavMesh に最初にマップされます。レイが NavMesh 境界に当たった場合、関数は True を返し、ヒットデータが満たされます。 Source から目標へさえぎるものがない場合、関数は False を返します。

If the raycast terminates on an outer edge, hit.mask is 0; otherwise it contains the area mask of the blocking polygon.

NavMesh で 2 点の間をエージェントが障害なく歩くことができる場合、確認として使用できます。たとえば、キャラクターがスペースが必要で回避しなければならない場合、キャラクターの場所から複数の方向にキャラクタが回避できる場所を見つけるためにレイを放つことができます。

NavMesh.Raycast は Physics Raycast とは異なります。これはNavMesh 上で "2.5 次元" で機能するものだからです。 Physics Raycast との違いは NavMesh 版は地面の穴などのようなナビゲーションの障害物のすべての種類を検出できます。エリアをナビゲートできるなら斜面を登るようなこともできます。

// TargetReachable
using UnityEngine;
using UnityEngine.AI;

public class TargetReachable : MonoBehaviour { public Transform target; private NavMeshHit hit; private bool blocked = false;

void Update() { blocked = NavMesh.Raycast(transform.position, target.position, out hit, NavMesh.AllAreas); Debug.DrawLine(transform.position, target.position, blocked ? Color.red : Color.green);

if (blocked) Debug.DrawRay(hit.position, Vector3.up, Color.red); } }

NavMesh で最も近い点を見つけるために探している場合、ワールドで点を見つけるために Physics Raycast を使用する必要があります。 Move to Click Point の例を参照してください。


public static bool Raycast (Vector3 sourcePosition, Vector3 targetPosition, out AI.NavMeshHit hit, AI.NavMeshQueryFilter filter);

パラメーター

sourcePosition レイの始点
targetPosition レイの終点
hit レイを飛ばしてヒットしたオブジェクトのプロパティー情報
filter A filter specifying which NavMesh areas can be passed when tracing the ray.

戻り値

bool ターゲット位置に辿りつく前に終点となる場合は true、そうでない場合は false

説明

Traces a line between two positions on the NavMesh, subject to the constraints defined by the filter argument.

The line is terminated on outer edges or a non-passable area.