在Unity3D中开发横版游戏时,我们可以使用C#编写一些敌人的AI行为。以下是一个简单的代码,演示了如何实现敌人的自动巡逻和攻击行为。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyAI : MonoBehaviour
{
// 巡逻点的集合
public Transform[] patrolPoints;
// 攻击目标的对象
public GameObject target;
// 移动的速度
public float speed = 2f;
// 攻击的冷却时间
public float attackCooldown = 1f;
private List<Transform> _patrolQueue = new List<Transform>();
private float _nextAttack = 0f;
private void Start()
{
// 将所有的巡逻点加入队列
for (int i = 0; i < patrolPoints.Length; i++)
{
_patrolQueue.Add(patrolPoints[i]);
}
}
private void Update()
{
// 如果当前没有在冷却时间内,可以进行攻击
if (Time.time < _nextAttack)
{
// 获取当前位置和目标的位置
Vector3 myPos = transform.position;
Vector3 targetPos = target.transform.position;
// 计算目标的方向,并朝向目标移动
Vector3 direction = (targetPos - myPos).normalized;
transform.position += direction * speed * Time.deltaTime;
}
else
{
// 如果没有到达目标,继续巡逻
if (transform.position != patrolPoints[_patrolQueue.Count % patrolPoints.Length].position)
{
// 计算当前位置到下一个巡逻点的方向,并朝向该方向移动
Vector3 direction = (patrolPoints[_patrolQueue.Count % patrolPoints.Length].position - transform.position).normalized;
transform.position += direction * speed * Time.deltaTime;
}
else
{
// 如果到达了目标,将下一个目标加入到队列中,并重置攻击冷却时间
_patrolQueue.Add(_patrolQueue[_patrolQueue.Count % _patrolQueue.Count]);
_nextAttack = Time.time + attackCooldown;
}
}
}
}
这段代码中,EnemyAI类有两个公共的成员变量:patrolPoints和target。patrolPoints是一个Transform数组,定义了敌人在巡逻时的路径点;target是一个GameObject,定义了敌人攻击的目标。在Start方法中,我们将所有的巡逻点加入到队列中。在Update方法中,我们首先判断当前是否可以攻击,如果可以攻击,就计算出目标的位置,并朝向目标移动;如果不可以攻击,我们就计算出下一个巡逻点的位置,并朝向该方向移动。当到达下一个巡逻点时,我们将下一个巡逻点加入到队列中,并重置攻击冷却时间。这样就可以实现敌人的自动巡逻和攻击行为。

© 版权声明
本站部分内容为网络收集,若侵犯到您的权益,请提供相关证明联系,即删。
更多交流点击入群
更多交流点击入群
THE END