Unity 2D 2020:如何让这段代码检查两个不同的组件?

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

我有一个攻击脚本,它会检查对象是否有“敌人脚本”,如下所示:

// Damage them
foreach (Collider2D enemy in hitEnemies)
{
    // Debug log showing the attack connected
    Debug.Log("We hit " + enemy.name);`

    // the enemy takes damage from the player, could be rewritten
    enemy.GetComponent<Enemy>().TakeDamage(attackDamage);
}

现在的问题是,它只检查他们对象是否有那个脚本。我还需要让它检查其中包含加载区域方法的 boss 脚本。

我可以让它只是一个 Enemy 脚本或 EnemyLoadArea 脚本。这个想法是,只有老板有 EnemyLoadArea 脚本。如果我将它从“enemy.GetComponent”更改为“enemy.GetComponent”,Unity 将不再识别损坏,敌人也不会死。

可能有更好的方法让场景在 Boss 死亡时加载,但我不知道是否有。

我在Unity里不能留空,所以敌人脚本里不能有load area code。我怎样才能让它检查两个不同的游戏对象?或者,我如何重写代码来检查 Unity 中的标签?所以它不是寻找敌人脚本,而是检查 NPC 是否被标记为敌人,然后受到伤害?

我试过使用

enemy.GetComponent<Enemy || EnemyLoadArea>().TakeDamage(attackDamage);

enemy.GetComponent<Enemy>().TakeDamage(attackDamage);
enemy.GetComponent<EnemyLoadArea>().TakeDamage(attackDamage);

并且还尝试重用相同的 foreach 方法,将组件从“”更改为<"EnemyLoadArea">,但它也不起作用。

我尝试过的每一个不同的修复都会返回错误,比如“|| cannot be used”,或者只是

NullReferenceException:对象引用未设置为一个实例 对象 PlayerAttack.Attack () (在 资产/脚本/播放器/PlayerAttack.cs:53) PlayerAttack.Update () (at 资产/脚本/播放器/PlayerAttack.cs:30)

c# unity3d
© www.soinside.com 2019 - 2024. All rights reserved.