我有以下定義事件和委託的類。然後我有觸發這樣的事件的方法:在特定實例上觸發的代表和事件
public class HealthManager : MonoBehaviour {
// Create the delegate
public delegate void ObjectDeath(GameObject go);
// Create the event
public static event ObjectDeath OnObjectDeath;
public static void GiveDamage(GameObject dealer, GameObject receiver, float amount){
/*
Subtract health here
... Code Snipped ...
*/
if(objectHealth.health <= objectHealth.deathHealth){
// Trigger the delegate/event
OnObjectDeath(receiver);
}
}
}
然後我有這個類來監聽事件被炒魷魚是這樣的:
public class DeathListener : MonoBehaviour {
// Add event listeners when object gets enabled
void OnEnable() {
HealthManager.OnObjectDeath += Died;
}
// Remove event listeners when object gets disabled
void OnDisable() {
HealthManager.OnObjectDeath -= Died;
}
void Died(GameObject go){
if(gameObject == go){
Destroy(gameObject);
}
}
}
這個問題我已經是,就是它只能在特定對象上觸發事件?
所以,與其這樣:
// Trigger
OnObjectDeath(receiver);
// ---------------------------- //
void Died(GameObject go){
if(gameObject == go){
Destroy(gameObject);
}
}
我可以做這樣的事情:
receiver.OnObjectDeath();
// ---------------------------- //
void Died(){
Destroy(gameObject);
}
我想有一種方式,其中在事件Died
我沒有檢查將其應用於哪個對象。目前,如果我刪除if
語句,那麼它將應用於所有gameObjects,而不僅僅是我正在使用的實例。
通過說「那麼它將適用於所有的gameObjects不只是我正在使用的實例」你是指所有的場景中的對象?即使那些沒有DeathListener組件的人? –
對不起,只有那些有DeathListener組件的人。 –
爲什麼你讓你的事件是靜態的?請刪除靜態並查看它是否仍然銷燬其他gameObjects –