赞
踩
常见寻路方法:
路点寻路:在地图中手动设置多个点然后在点间移动
单元格寻路
网格寻路:自动寻路
实现网格寻路步骤:
private void Start()
{
agent = this.GetComponent<NavMeshAgent>();
}
private void Update()
{
agent.SetDestination(target.position);
}
NavMeshAgent属性
Radius 寻路的碰撞半径
Height 寻路的碰撞高度
BaseOffset 寻路碰撞的位置
Speed 寻路物体的速度
Acceleration 转弯时的加速度
AngularSpeed 转弯时物体的角速度
StoppingDistance 停止的距离
AvoidancePriority 躲避系数
寻路路径烘焙属性
Radius 是指寻路区域与障碍物之间半径
Height 是指寻路区域与地面之间的高度
MaxSlope 是指寻路区域烘焙的最大坡度
StepHeight 是指台阶高度
寻路系统区域遮罩:
(PS:Cost:寻路区域消耗度,数值越大,从此寻路区域消耗越大。
寻路物体在区域消耗数值一样的情况下,会选择最优(最近)路面寻路,但如果寻路区域的消耗数值不同,会根据消耗的数值,越小越最优进行寻路。)
通过代码实现勾选不同的寻路区域:
GetComponent().areaMask =9;
寻路区域每一区域都是2的幂
9则为Walkable区域(1)+red区域(8) = 9
Everything所有区域-1
Nothing任何区域都不能寻路 0
计算寻路曲线距离
using UnityEngine; using System.Collections; /// <summary> /// 计算寻路曲线距离 /// </summary> public class NavPath : MonoBehaviour { private NavMeshAgent agent; private NavMeshPath path; public Transform target; private void Start() { agent = this.GetComponent<NavMeshAgent>(); path = new NavMeshPath(); } private void Update() { agent.SetDestination(target.position); print("曲线距离 : " + NavPathFunc(target.position)); } private float NavPathFunc(Vector3 pathTarget) { agent.CalculatePath(target.position, path); if (path.corners.Length < 2) return 0; Vector3 previousCorner = path.corners[0]; float lengthSoFar = 0.0F; int i = 1; while (i < path.corners.Length) { Vector3 currentCorner = path.corners[i]; lengthSoFar += Vector3.Distance(previousCorner, currentCorner); previousCorner = currentCorner; i++; } return lengthSoFar; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。