Legacy Documentation: Version 4.5.0

Script language:

  • JS
  • C#
  • Boo
Script language

Select your preferred scripting language. All code snippets will be displayed in this language.

NavMeshAgent.SamplePathPosition

Switch to Manual
SamplePathPosition(passableMask: int, maxDistance: float, hit: NavMeshHit): bool;
bool SamplePathPosition(int passableMask, float maxDistance, NavMeshHit hit);
def SamplePathPosition(passableMask as int, maxDistance as float, hit as NavMeshHit) as bool

Parameters

passableMaskA mask specifying which NavMesh layers can be passed when tracing the path.
maxDistanceTerminate scanning the path at this distance.
hitHolds the properties of the resulting location.

Returns

bool True if terminated before reaching the position at maxDistance, false otherwise.

Description

Sample a position along the current path.

This function looks ahead a specified distance along the current path. Details of the mesh at that position are then returned in a NavMeshHit object. This could be used, for example, to check the type of surface that lies ahead before the character gets there - a character could raise his gun above his head if he is about to wade through water, say.

	var target: Transform;
	var mesh: NavMesh;

private var agent: NavMeshAgent; private var waterLayer: int;

function Start () { agent = GetComponent.<NavMeshAgent>(); waterLayer = mesh.GetNavMeshLayerFromName("Water"); agent.SetDestination(target.position); }

function Update() { var hit: NavMeshHit; // Check all layers one unit ahead. if (!agent.SamplePathPosition(-1, 1.0, hit)) { if (hit.mask & waterLayer) { // Water detected along the path... } } }

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Transform target;
    public NavMesh mesh;
    private NavMeshAgent agent;
    private int waterLayer;
    void Start() {
        agent = GetComponent<NavMeshAgent>();
        waterLayer = mesh.GetNavMeshLayerFromName("Water");
        agent.SetDestination(target.position);
    }
    void Update() {
        NavMeshHit hit;
        if (!agent.SamplePathPosition(-1, 1.0F, out hit))
            if (hit.mask & waterLayer) {
            }
        
    }
}
import UnityEngine
import System.Collections

public class ExampleClass(MonoBehaviour):

	public target as Transform

	public mesh as NavMesh

	private agent as NavMeshAgent

	private waterLayer as int

	def Start() as void:
		agent = GetComponent[of NavMeshAgent]()
		waterLayer = mesh.GetNavMeshLayerFromName('Water')
		agent.SetDestination(target.position)

	def Update() as void:
		hit as NavMeshHit
		if not agent.SamplePathPosition(-1, 1.0F, ):
			if hit.mask & waterLayer:
				pass