如何让敌人一次只攻击一名玩家

问题描述 投票:0回答:2

在我的场景中,当玩家进入他们的范围时,我会产生三个敌人,他们开始攻击,但问题是所有三个敌人同时攻击玩家。我希望当敌人攻击玩家时,其他 2 名玩家必须等到第一个玩家完成或敌人攻击玩家交替

c# unity-game-engine game-development
2个回答
1
投票

一种方法是为玩家分配一个布尔值,

isUnderAttack
。当敌人试图与玩家交战时,检查玩家是否受到攻击,如果是,则停止攻击,如果是,则继续攻击。您可以为排队的敌人定义任何类型的行为。


0
投票

我是如何实现这一目标的,在玩家的脚本中创建了一个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;

}

© www.soinside.com 2019 - 2024. All rights reserved.