unity用navmesh和random随机数的方法写敌人随机巡逻,当到达目标位置时等待3秒,然后去下一个随机目标位置
时间: 2024-03-20 22:44:57 浏览: 137
好的,我可以帮你回答这个问题。
首先,我们需要在场景中创建一个NavMesh,然后将其应用于敌人角色的Navigation组件上。这将使敌人角色能够在NavMesh上自动寻找路径并移动。
接下来,我们需要在敌人角色的脚本中编写随机巡逻的代码。代码的基本思路是每隔一段时间随机选择一个目标位置,然后让敌人角色朝着目标位置移动。当敌人角色到达目标位置时,等待一段时间后再选择下一个随机目标位置。
下面是一个示例脚本:
```csharp
using System.Collections;
using UnityEngine;
using UnityEngine.AI;
public class EnemyPatrol : MonoBehaviour
{
public float patrolInterval = 5f; // 巡逻间隔时间
public float waitTime = 3f; // 到达目标位置后等待时间
private NavMeshAgent agent; // Navigation组件
private Vector3 targetPosition; // 当前目标位置
void Start()
{
agent = GetComponent<NavMeshAgent>();
StartCoroutine(Patrol()); // 开始巡逻协程
}
IEnumerator Patrol()
{
while (true)
{
targetPosition = GetRandomPosition(); // 随机选择目标位置
agent.SetDestination(targetPosition); // 移动到目标位置
yield return new WaitForSeconds(waitTime); // 等待一段时间
}
}
Vector3 GetRandomPosition()
{
// 在NavMesh上随机选择一个可达位置作为目标位置
Vector3 randomDirection = Random.insideUnitSphere * 10f;
randomDirection += transform.position;
NavMeshHit hit;
NavMesh.SamplePosition(randomDirection, out hit, 10f, NavMesh.AllAreas);
return hit.position;
}
}
```
在这个脚本中,我们使用了协程来实现巡逻的循环。在每次循环中,我们首先随机选择一个目标位置,然后将敌人角色移动到目标位置。当敌人角色到达目标位置后,我们再等待一段时间后再选择下一个随机目标位置。
GetRandomPosition() 方法用于在NavMesh上随机选择一个可达位置作为目标位置。我们使用了Random.insideUnitSphere来生成一个随机方向,并将其加到敌人角色当前位置上得到一个随机位置。然后我们使用NavMesh.SamplePosition()方法来找到最近的可达位置作为目标位置。
希望这个示例能够帮助你实现敌人的随机巡逻功能。
阅读全文