Question by
poohateq · May 26, 2017 at 06:04 PM ·
navmeshnavmeshagenttagwander
Wander on navMesh until gameObject goes too far, then return and loop that (navmesh, wanderAI) please point me in right direction.
Hey, im currently working on some sort of AI for my project, trying to solve it one way or another for a couple of days now without effect i wanted.
Effect im looking for: gameobject finds other gameobject with tag "tree", goes there and starts wandering around the object, if distanceMax is crossed, then it goes back to the tree and wanders around again.
I got mixed results based on mixed ways of trying to do it but nothing worked perfectly like that. Can someone more experianced tell me how could i approach this or something? Any help would be really nice.. since i kinda ran out of ideas how to bite this one.
Here is my code im working on atm
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI;
public class CourutineAI : MonoBehaviour {
public float wanderRadius;
public float wanderTimer;
public float distance;
public float distanceMax;
private Transform wolf;
private NavMeshAgent agent;
public Transform tree;
public SphereCollider col;
public Vector3 newPos;
public Vector3 homePos;
void Start()
{
agent = GetComponent<NavMeshAgent>();
wolf = transform;
StartCoroutine(Example());
tree = GameObject.FindGameObjectWithTag("Tree").transform;
}
private void Update()
{
distance = Vector3.Distance(wolf.position, tree.position);
}
IEnumerator Example()
{
if (distance < distanceMax)
{
newPos = RandomNavSphere(transform.position * Time.deltaTime, wanderRadius, -1);
agent.SetDestination(newPos);
yield return new WaitForSeconds(5);
}
else if (distance >= distanceMax)
{
homePos = tree.position;
agent.SetDestination(homePos);
yield return new WaitForSeconds(5);
}
}
public static Vector3 RandomNavSphere(Vector3 origin, float dist, int layermask)
{
Vector3 randDirection = Random.insideUnitSphere * dist;
randDirection += origin;
NavMeshHit navHit;
NavMesh.SamplePosition(randDirection, out navHit, dist, layermask);
return navHit.position;
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612122806im_/https://answers.unity.com/themes/thub/images/avi.jpg)