[英]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.