在我的场景中,当玩家进入他们的范围时,我会产生三个敌人,他们开始攻击,但问题是所有三个敌人同时攻击玩家。我希望当敌人攻击玩家时,其他 2 名玩家必须等到第一个玩家完成或敌人攻击玩家交替
一种方法是为玩家分配一个布尔值,
isUnderAttack
。当敌人试图与玩家交战时,检查玩家是否受到攻击,如果是,则停止攻击,如果是,则继续攻击。您可以为排队的敌人定义任何类型的行为。
我是如何实现这一目标的,在玩家的脚本中创建了一个enemyControl()函数,它具有OverlapSphere或在玩家的变换中使用ontriggerEnter来捕获enemyLayer。当敌人进入此重叠球体时,通过最近的或随机的敌人调用敌人的 AttackFunction,然后为下一次调用提供 waitTIME 或添加布尔值以检查该特定敌人是否完成攻击。
示例代码
public void EnemyControl(){
if (waitTime < Time.time){
Collider[] hitEnemies = Physics.OverlapBox(attackPos.position, new Vector3(4, 3, 5.53f) / 2, attackPos.rotation, enemyLayer);
if (hitEnemies.Length > 0)
{
foreach (Collider enemy in hitEnemies)
{
EnemyController enemyController = enemy.GetComponent<EnemyController>();
if (enemyController != null && enemyController.currentState == EnemyController.EnemyState.Attack){
enemyController.Attack();
waitTime = 2f + Time.time;
break;
}
}
}
} else waitTime-=Time.fixedDeltaTime;
}