unity用navmesh写敌人随机巡逻,当到达目标点时停止3秒,然后继续巡逻
时间: 2024-03-21 15:38:42 浏览: 74
Unity,用于制作AI敌人移动地图的插件
好的,针对你的问题,我可以提供一些思路和实现方法:
1. 创建NavMeshAgent组件,设置巡逻路径
首先,你需要在场景中创建一个空物体作为敌人巡逻路径的父节点。然后,使用Unity自带的Navigation工具为敌人创建NavMesh,并在NavMeshAgent组件中设置巡逻路径。
2. 设置敌人随机巡逻
在敌人的脚本中,可以使用Random.insideUnitCircle方法生成一个随机的2D向量,然后将其转换为3D坐标。接着,使用NavMesh.SamplePosition方法将该点转换为NavMesh上的有效坐标,并设置为敌人的目标点。
3. 到达目标点后停止3秒
当敌人到达目标点时,可以使用NavMeshAgent.remainingDistance属性来判断是否到达目标点。如果到达了目标点,则将敌人的移动速度设置为0,等待3秒后继续巡逻。
下面是一份示例代码:
```
public class EnemyController : MonoBehaviour
{
public float patrolSpeed = 2f;
public float waitTime = 3f;
private NavMeshAgent navMeshAgent;
private Vector3 targetPosition;
private bool isWaiting;
void Start()
{
navMeshAgent = GetComponent<NavMeshAgent>();
targetPosition = GetRandomPointOnNavMesh();
isWaiting = false;
}
void Update()
{
if (!navMeshAgent.pathPending && navMeshAgent.remainingDistance < 0.1f && !isWaiting)
{
navMeshAgent.speed = 0f;
isWaiting = true;
Invoke("ResumePatrol", waitTime);
}
if (!isWaiting)
{
navMeshAgent.speed = patrolSpeed;
if (navMeshAgent.remainingDistance < 0.5f)
{
targetPosition = GetRandomPointOnNavMesh();
navMeshAgent.SetDestination(targetPosition);
}
}
}
Vector3 GetRandomPointOnNavMesh()
{
Vector3 randomPosition = Random.insideUnitCircle * 10f;
randomPosition += transform.position;
NavMeshHit hit;
NavMesh.SamplePosition(randomPosition, out hit, 10f, NavMesh.AllAreas);
return hit.position;
}
void ResumePatrol()
{
isWaiting = false;
}
}
```
希望这个示例代码可以帮助你完成敌人随机巡逻的实现!
阅读全文