Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 如何为多个敌人制作脚本_Unity3d - Fatal编程技术网

Unity3d 如何为多个敌人制作脚本

Unity3d 如何为多个敌人制作脚本,unity3d,Unity3d,我制作了一个玩家战斗脚本。但是它只对一个特定的敌人有效。我怎样才能使它成倍?这是我代码的一部分 [SerializeField] private Enemy enemysc; void Attack() { if (attack2 == false && attack3 == false) { anim.SetBool("isAttack", true); Collider2D[] hitEnemies =

我制作了一个玩家战斗脚本。但是它只对一个特定的敌人有效。我怎样才能使它成倍?这是我代码的一部分

[SerializeField]
private Enemy enemysc;
 
void Attack()
{
    if (attack2 == false && attack3 == false)
    {
        anim.SetBool("isAttack", true);
        Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, attackRange, enemyLayers);
        foreach (Collider2D enemy in hitEnemies)
        {
            enemysc.DamageEnemy(attackDamage); //(this part important for me)
 
        }
        attack2 = true;
    }
}

通过查看上面的代码,您有一个敌人字段,您可能正在编辑器中将一个敌人拖到该字段中。因此,它只适用于一个敌人。根据场景的工作方式,有很多方法可以实现您想要的功能,但最简单的方法是向您的敌人预设中添加一个标记,称之为“敌人”,然后使用类似的函数在脚本中动态获取它们。这将为您提供当前在屏幕上活动的所有标记为“敌人”的预制件。您可以反复查看它们,以找到您正在与之战斗的对象


另一种方法,因为您已经知道您在脚本中击中了什么游戏对象。如果你的角色要打不同的东西,用相关的标签标记它们,并在你打它们时检查游戏对象的标签。通过这种方式,您可以判断您是否正在打击敌人、盟友、盒子等。

您只是在使用“敌人”对象(是脚本吗?),而对foreach不做任何操作,因为您从未在循环中使用“敌人”碰撞R2D,使foreach无效。如果“enemysc”是一个附在你的敌人身上的脚本,你需要使用它

enemy.gameObject.GetComponent<enemysc>().DamageEnemy(attackDamage);     
然后在循环中使用与上面相同的方法


我不知道你的“敌人”对象是如何工作的,但是在你的循环中使用CollizedR2D.gameObject会让你的CollizedR2D阵列中包含所有敌人

你到目前为止尝试了什么?您好,欢迎来到这里。我们是来帮忙的,但我们的时间是宝贵的,所以我建议你花点时间休息一下。得到答案的机会要比没有答案的机会高得多。如果你还没有完成,请阅读。此外,我建议你好好回答你的问题,把所有的信息都放在你的问题里。
Enemy enemysc = new Enemy();