所以我有这个脚本影响另一个脚本就好了。它附加到一个游戏对象(一个攻击框),它会破坏另一个游戏对象(一个敌人)。它使敌人GameObject执行动画(它受到伤害)并带走一定的健康。这一切都很好。
我所坚持的是,我试图让它为不止一种类型的敌人做同样的事情,因此,访问多个脚本。脚本是相对相同的,我已经单独测试了这些脚本并且都运行良好。但是当我试图让我的攻击框附加脚本时,会影响多个脚本,我什么也得不到。我认为这只是它打字的方式而且我已经尝试了几种方法。但我已将其恢复为最简单的形式,以便在此处显示。如何让这个脚本同时适用于这两个脚本,所以我不必将多个脚本连接到一个hitbox?
我应该提一下,在这个脚本中,它确实访问了OnTriggerEnter2D函数中提到的第一个脚本。对于之后提到的任何其他脚本,它都不会这样做。
complete
答案 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);
}
}
由于Goblin
和Foe
都是Enemy
类型,GetComponent<Enemy>()
会返回各自的派生类型,您可以在其上调用TakeDamage()
。