Search Unity

  1. Unity Asset Manager is now available in public beta. Try it out now and join the conversation here in the forums.
    Dismiss Notice
  2. Unity 6 Preview is now available. To find out what's new, have a look at our Unity 6 Preview blog post.
    Dismiss Notice
  3. Unity is excited to announce that we will be collaborating with TheXPlace for a summer game jam from June 13 - June 19. Learn more.
    Dismiss Notice

Custom Heuristic?

Discussion in 'AI & Navigation Previews' started by CDF, Feb 22, 2017.

  1. CDF


    Sep 14, 2013
    Hi, was wondering if you guys have thought about adding custom heuristics when finding paths?

    as an example, with a custom heuristic I could drive the direction of found paths to exclude certain directions. Imagine an enemy following a player. The player wants to move behind the enemy to avoid it, but shouldn't turn around and walk towards the enemy. It should keep moving forward and look for a path that leads back around behind the enemy. With a custom heuristic I could increase the cost of a node based on the current path direction of to that node towards the enemy.

    Something like:

    Code (CSharp):
    1. NavMesh.CalculatePath(playerPos, enemyPos - enemy.forward * 3, areMask, CustomHeuristic);
    3. float CustomHeuristic(Vector3[] cornersSoFar, int cornerIndex, Vector3 sourcePosition, Vector3 targetPosition) {
    5.     Vector3 currentCorner = cornersSoFar[cornerIndex];
    6.     Vector3 previousCorner = cornersSoFar[cornerIndex - 1];
    8.     float directionOnEnemy = Vector3.Dot(currentCorner - previousCorner, currentCorner - enemy.position);
    10.     return directionOnEnemy < 0 ? float.PositiveInfinity : (currentCorner - targetPosition).magnitude;
    11. }
    I'm sure you guys could come up with a better callback, maybe passing in a struct of data instead of all those parameters.
    laurentlavigne likes this.