OnTriggerEnter2D(Collider2D other)...访问多个外部脚本函数

时间:2018-05-05 17:14:11

标签: c# triggers null return 2d

所以我有这个脚本影响另一个脚本就好了。它附加到一个游戏对象(一个攻击框),它会破坏另一个游戏对象(一个敌人)。它使敌人GameObject执行动画(它受到伤害)并带走一定的健康。这一切都很好。

我所坚持的是,我试图让它为不止一种类型的敌人做同样的事情,因此,访问多个脚本。脚本是相对相同的,我已经单独测试了这些脚本并且都运行良好。但是当我试图让我的攻击框附加脚本时,会影响多个脚本,我什么也得不到。我认为这只是它打字的方式而且我已经尝试了几种方法。但我已将其恢复为最简单的形式,以便在此处显示。如何让这个脚本同时适用于这两个脚本,所以我不必将多个脚本连接到一个hitbox?

我应该提一下,在这个脚本中,它确实访问了OnTriggerEnter2D函数中提到的第一个脚本。对于之后提到的任何其他脚本,它都不会这样做。

complete

1 个答案:

答案 0 :(得分:1)

声明所有敌人类型派生的通用敌人类。

public class Enemy : MonoBehaviour
{
    int health;

    public void TakeDamage(int amount)
    {
        health -= amount;
    }
}

更改您的敌人类别,使其全部来自Enemy

public class Goblin : Enemy
{
    // Extra fields/methods
}

public class Foe : Enemy
{
    // Extra fields/methods
}

现在您可以将支票简化为:

public void OnTriggerEnter2D (Collider2D other)
{
    if (other.gameObject.tag == "Enemy")
    {
        other.GetComponent<Enemy>().TakeDamage(5);
    }
}

由于GoblinFoe都是Enemy类型,GetComponent<Enemy>()会返回各自的派生类型,您可以在其上调用TakeDamage()