簡體   English   中英

如何從游戲對象中獲取任何腳本組件

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM