所以我有这个脚本可以很好地影响另一个脚本。它附加到一个游戏对象(攻击框)上,从而损坏另一个游戏对象(敌人)。它使敌人的游戏对象执行动画(它受伤)并带走一定数量的生命值。这一切都很好。
我坚持的是,我试图让它对不止一种类型的敌人做同样的事情,因此,访问多个脚本。脚本相对相同,我已经单独测试了它们,并且都工作正常。但是当我试图让我的攻击框附加脚本时,影响多个脚本,我什么也得不到。我认为这只是它的输入方式,我已经尝试了几种方法。但是我已经将其恢复为最简单的形式以在此处显示。如何让此脚本同时适用于两者,这样我就不必将多个脚本附加到一个命中框?
我应该提到,在此脚本中,它确实访问了OnTriggerEnter2D函数中提到的第一个脚本。它只是不对后面提到的任何其他脚本执行此操作。
using UnityEngine;
using System.Collections;
public class slicer : MonoBehaviour {
public int damage = 5;
private foeHP foe;
private goblin gobby;
public float timer;
void Update()
{
Destroy ();
timer -= Time.deltaTime;
}
public void OnTriggerEnter2D (Collider2D other)
{
if (other.gameObject.tag == "Enemy") {
other.gameObject.GetComponent<foeHP> ().takeDamage (damage);
var foe = other.GetComponent<foeHP> ();
other.gameObject.GetComponent<goblin> ().takeDamage (damage);
var gobby = other.GetComponent<goblin> ();
}
if (foe == null) {
return;
}
if (gobby == null) {
return;
}
}
public void Destroy(){
if (timer <=0)
Destroy(gameObject);
}
}
声明所有敌人类型派生自的通用 Enemy 类。
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()
。