- Home /
Question by
gusicpavao · Apr 24, 2020 at 02:53 PM ·
pathfindingfollow playerfollow pathsphericalnpcs
Ai Follow Player which moves over a sphere
Hello, I'm trying to implement an Ai character that follows the player around the surface of the sphere. I've successfully implemented player movement around the sphere, but I've been banging my head for hours looking for some Ai solution. For the Ai character the only thing I want is to follow me around the sphere. Both character and player use the same function for translation: transform.translate (direction) so that direction is a normalized vector. I found a solution that works but only for the top half of the sphere. Here is my code example:
public Transform targetTransform;
public Transform agentTransform;
private List<Vector3> path;
public float searchRate;
private float lastSearch = 0.0f;
private int nodeIndex;
public float minProximity;
public override void UpdateController()
{
UpdatePathFinding();
}
private void UpdatePathFinding()
{
if (Time.time > searchRate + lastSearch)
{
path = PathfindingManager.Instance.FindPath(agentTransform.position, targetTransform.position);
nodeIndex = 1;
lastSearch = Time.time;
}
var targetDirection = UpdatePath();
InvokeDirectionEvent(targetDirection);
}
private Vector3 UpdatePath()
{
if (path == null || path.Count == 0 || nodeIndex >= path.Count)
return Vector3.zero;
if (Vector3.Distance(agentTransform.position, path[nodeIndex]) <= minProximity)
nodeIndex++;
if (nodeIndex >= path.Count)
return Vector3.zero;
var agentPosition = new Vector3(agentTransform.position.x, 0, agentTransform.position.z);
var targetPosiotion = new Vector3(targetTransform.position.x, 0, targetTransform.position.z);
var nodePosiotion = new Vector3(path[nodeIndex].x, 0, path[nodeIndex].z);
var direction = (agentPosition - targetPosiotion).normalized;
return direction;
}
Comment