unity用navmesh和random随机数的方法让敌人随机巡逻,在到达目标点后暂停巡逻
时间: 2024-04-04 08:34:11 浏览: 191
unity 随机数random 工具
4星 · 用户满意度95%
好的,我来解答你的问题。
首先,你可以使用Unity中的NavMesh来实现敌人的巡逻。NavMesh是一种用于处理游戏中角色导航的技术,它将地图分割成多个三角形区域,每个三角形区域都有一个中心点,角色可以在这些中心点之间移动。你可以使用NavMeshAgent组件来控制角色在NavMesh上移动。
其次,你可以使用Random.Range()函数来随机生成目标点。这个函数可以生成一个指定范围内的随机数,你可以将其用于敌人巡逻的目标点生成。
最后,在到达目标点后,你可以使用Coroutine来实现暂停巡逻。Coroutine是Unity中的一种协程技术,它可以让你在代码中实现异步操作。你可以使用Coroutine来实现在到达目标点后暂停一段时间,然后再继续巡逻。
下面是一个简单的示例代码:
```csharp
using UnityEngine;
using System.Collections;
public class EnemyPatrol : MonoBehaviour {
public float patrolSpeed = 2f; // 巡逻速度
public float patrolWaitTime = 1f; // 到达目标点后等待时间
public float patrolRadius = 10f; // 巡逻半径
private Vector3 targetPosition; // 目标点位置
private NavMeshAgent navMeshAgent; // NavMeshAgent组件
private Coroutine patrolCoroutine; // 巡逻协程
void Start () {
navMeshAgent = GetComponent<NavMeshAgent>();
targetPosition = RandomNavSphere(transform.position, patrolRadius, -1);
patrolCoroutine = StartCoroutine(Patrol());
}
IEnumerator Patrol() {
while (true) {
navMeshAgent.SetDestination(targetPosition);
while (navMeshAgent.remainingDistance > navMeshAgent.stoppingDistance) {
yield return null;
}
yield return new WaitForSeconds(patrolWaitTime);
targetPosition = RandomNavSphere(transform.position, patrolRadius, -1);
}
}
static Vector3 RandomNavSphere(Vector3 origin, float distance, int layermask) {
Vector3 randomDirection = Random.insideUnitSphere * distance;
randomDirection += origin;
NavMeshHit navHit;
NavMesh.SamplePosition(randomDirection, out navHit, distance, layermask);
return navHit.position;
}
}
```
这个示例代码中,我们使用了RandomNavSphere()函数来生成随机的目标点。在Patrol()协程中,我们先使用NavMeshAgent设置目标点,然后使用一个while循环等待敌人到达目标点。到达目标点后,我们使用Coroutine提供的WaitForSeconds()函数来等待一段时间,然后再生成新的目标点。这样就可以实现敌人的随机巡逻,并且在到达目标点后暂停巡逻了。
阅读全文