[英]How to get any script component from a Game Object
我的游戏中有很多不同的敌人。 这些敌人中的每一个都有不同的脚本。 当玩家击中敌人时,我希望其特定脚本中的健康变量减少。
我意识到我可以做这样的事情:
if(Target.getComponent<Enemy1script>()) Target.getComponent<Enemy1Script>().health -= Damage
然而,我的游戏中有很多不同类型的敌人,因此有很多不同的脚本,这意味着效率不高。 因为所有这些脚本都有一个共同的变量 ( health
),我想知道您是否可以访问它们的脚本组件?
例如:
Target.getComponent<Script>().health -= 1
解决您的问题的方法是创建一个名为 Enemy 的基类,用于存储健康并可能包含一些虚拟行为函数。 对于每种不同类型的敌人,您的敌人类将从基本敌人类继承。
例如:
敌人.cs
public class Enemy : Monobehaviour {
public int health;
};
EnemyType1.cs
public class EnemyType1 : Enemy {
//Unique enemy behaviour goes here
};
这意味着您可以使用
target.GetComponent<Enemy>().health;
访问任何敌人的健康,而无需具体知道它是什么。
调用 GetComponent 非常耗费资源,所以我个人会做的是
target.SendMessage("applyDamage", damageToDo, SendMessageOptions.DontRequireReceiver);
然后在你的敌人班级你会有
public class Enemy : Monobehaviour {
private int health;
public void applyDamage(int amount) {
health-=amount;
}
};
unity 文档很好地解释了 SendMessage 是什么以及如何使用它。 总之,它尝试在附加到对象的任何脚本上调用该函数并将参数传递给它。 如果您需要发送多个参数,那么您将不得不创建一个结构并发送它。 SendMessage 中的最后一个参数意味着如果它碰到了没有该函数的东西,它不会导致游戏抛出异常并崩溃
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.