unity用navmesh和random写敌人随机巡逻
时间: 2023-07-18 12:41:29 浏览: 223
好的,下面是一份使用NavMesh和Random实现敌人随机巡逻的示例代码:
```csharp
using UnityEngine;
using UnityEngine.AI;
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.insideUnitSphere * 10f + transform.position;
NavMeshHit hit;
NavMesh.SamplePosition(randomPosition, out hit, 10f, NavMesh.AllAreas);
return hit.position;
}
void ResumePatrol()
{
isWaiting = false;
}
}
```
在这份代码中,我们首先在Start方法中获取了NavMeshAgent组件,并随机生成了一个NavMesh上的目标点。然后,在Update方法中,判断敌人是否到达了目标点,如果到达了目标点,则暂停移动一段时间。如果没有到达目标点,则继续向目标点移动。在移动的过程中,如果敌人离目标点的距离小于0.5f,则重新生成一个随机的目标点,并设置为新的目标点。
希望这份代码可以帮助你完成敌人随机巡逻的实现!
阅读全文