Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //----------------------------------------------------------------------------------------
- public static float CalculatePathCost(Vector3[] _pathCorners, int _pathLength, NavMeshQueryFilter _queryFilter)
- {
- float cost = 0;
- NavMeshHit hit;
- NavMesh.SamplePosition(_pathCorners[0], out hit, 0.1f, NavMesh.AllAreas);
- var rayStart = _pathCorners[0];
- var mask = hit.mask;
- var areaIndex = IndexFromMask(mask);
- for (var index = 1; index < _pathLength; ++index)
- {
- var maxTries = 5;
- do
- {
- var corner = _pathCorners[index];
- if (NavMesh.Raycast(rayStart, corner, out hit, mask))
- {
- cost += _queryFilter.GetAreaCost(areaIndex) * hit.distance;
- if (hit.mask != 0)
- mask = hit.mask;
- areaIndex = IndexFromMask(mask);
- rayStart = hit.position;
- if (hit.mask == 0)
- rayStart += (corner - rayStart).normalized * 0.05f;
- }
- else
- {
- rayStart += (corner - rayStart).normalized * 0.05f;
- }
- maxTries--;
- } while (hit.hit && maxTries > 0);
- }
- return cost;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement