Search Unity

Custom Heuristic?

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

  1. CDF

    CDF

    Joined:
    Sep 14, 2013
    Posts:
    1,142
    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);
    2.  
    3. float CustomHeuristic(Vector3[] cornersSoFar, int cornerIndex, Vector3 sourcePosition, Vector3 targetPosition) {
    4.    
    5.     Vector3 currentCorner = cornersSoFar[cornerIndex];
    6.     Vector3 previousCorner = cornersSoFar[cornerIndex - 1];
    7.  
    8.     float directionOnEnemy = Vector3.Dot(currentCorner - previousCorner, currentCorner - enemy.position);
    9.  
    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.
unityunity