unity实现敌人的功能:正常状态下站立,如果过了三秒就开始随机巡逻,到达了随机目标点后回到正常状态站立
时间: 2024-03-22 20:38:57 浏览: 135
可以通过以下步骤来实现敌人的功能:
1. 在Unity中创建一个敌人对象,添加一个Animator组件,设置敌人的站立动画和巡逻动画。
2. 添加一个脚本组件,命名为EnemyController,并添加以下代码:
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyController : MonoBehaviour
{
public float patrolSpeed = 2f; // 巡逻速度
public float waitTime = 3f; // 等待时间
public float turnSpeed = 5f; // 转向速度
private Animator animator; // 敌人的动画控制器
private bool isPatrolling = false; // 是否在巡逻状态
private float timer = 0f; // 计时器
private Vector3 targetPosition; // 目标位置
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
if (!isPatrolling)
{
// 如果不在巡逻状态,播放站立动画
animator.SetBool("isPatrolling", false);
return;
}
// 如果在巡逻状态,播放巡逻动画
animator.SetBool("isPatrolling", true);
// 计算敌人需要转向的方向
Vector3 targetDirection = targetPosition - transform.position;
targetDirection.y = 0f;
// 计算敌人需要转向的角度
float angle = Vector3.Angle(transform.forward, targetDirection);
// 如果敌人需要转向,旋转敌人的朝向
if (angle > 5f)
{
Quaternion targetRotation = Quaternion.LookRotation(targetDirection);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, turnSpeed * Time.deltaTime);
}
// 移动敌人
transform.Translate(Vector3.forward * patrolSpeed * Time.deltaTime);
// 如果敌人到达目标点,回到正常状态
if (Vector3.Distance(transform.position, targetPosition) < 0.1f)
{
isPatrolling = false;
timer = 0f;
}
}
// 进入巡逻状态
public void StartPatrolling()
{
isPatrolling = true;
// 随机生成目标位置
targetPosition = new Vector3(Random.Range(-10f, 10f), 0f, Random.Range(-10f, 10f));
}
// 退出巡逻状态
public void StopPatrolling()
{
isPatrolling = false;
}
}
```
3. 在Unity中创建一个空对象,命名为EnemyManager,添加一个脚本组件EnemyManager,并添加以下代码:
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyManager : MonoBehaviour
{
public EnemyController enemy; // 敌人对象
void Start()
{
// 开始时敌人处于正常状态
enemy.StopPatrolling();
}
void Update()
{
// 计时器开始计时
enemy.timer += Time.deltaTime;
// 如果计时器超过3秒,进入巡逻状态
if (enemy.timer > 3f)
{
enemy.StartPatrolling();
}
}
}
```
4. 在Unity中创建一个空对象,命名为Enemy,将敌人对象和EnemyManager对象拖拽到Enemy对象下,然后调整敌人对象的位置。
现在,当运行游戏时,敌人处于正常状态,如果过了三秒就开始随机巡逻,到达了随机目标点后回到正常状态站立。
阅读全文