unity敌人随机在一定范围内走,如果到了目标点,在原地停留5秒后继续随机走
时间: 2024-03-20 12:38:39 浏览: 63
你可以使用Unity中的NavMeshAgent组件来实现敌人的随机移动和停留。首先,你需要在场景中创建一个NavMesh,将敌人放置在NavMesh上。然后,你可以在敌人上添加一个NavMeshAgent组件。
你可以编写一个脚本来控制敌人的行为。在脚本中,你可以使用Random.Range函数来生成一个随机的目标点,然后使用NavMeshAgent.SetDestination函数将敌人移动到该点。当敌人到达目标点时,你可以使用Coroutine函数来暂停5秒钟,然后再生成一个新的随机目标点,继续移动。
下面是一个示例代码:
```csharp
using UnityEngine;
using UnityEngine.AI;
using System.Collections;
public class EnemyController : MonoBehaviour
{
public float wanderRadius;
public float wanderTimer;
private Transform target;
private NavMeshAgent agent;
private float timer;
void OnEnable()
{
agent = GetComponent<NavMeshAgent>();
timer = wanderTimer;
}
void Update()
{
timer += Time.deltaTime;
if (timer >= wanderTimer)
{
Vector3 newPos = RandomNavSphere(transform.position, wanderRadius, -1);
agent.SetDestination(newPos);
timer = 0;
}
}
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;
}
IEnumerator WaitAndMove()
{
yield return new WaitForSeconds(5f);
Vector3 newPos = RandomNavSphere(transform.position, wanderRadius, -1);
agent.SetDestination(newPos);
yield break;
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Destination"))
{
StartCoroutine(WaitAndMove());
}
}
}
```
在这个示例代码中,我们使用OnTriggerEnter函数来检测敌人是否到达了目标点。如果到达了目标点,我们就启动一个协程来等待5秒钟,然后生成一个新的随机目标点,继续移动。在Update函数中,我们使用RandomNavSphere函数来生成一个随机的目标点,并使用NavMeshAgent.SetDestination函数将敌人移动到该点。
阅读全文