2015-04-19 53 views
1

我正在製作一個簡單的殭屍生存遊戲。這個代碼有問題,它只能檢測到一個觸發器,而不是另一個。OnTriggerEnter無法檢測到我的變形標記

#pragma strict 

var health = 100; 
var attack = 10; 
var delay = 5; 
var scream : AudioClip; 
var player : Collider; 

function OnTriggerEnter() { 

    if (player.gameObject.tag == "ZombieFlame") { 
     gameObject.Find("Flame").SendMessage("OnTriggerEnter"); 
    } 

    if (player.gameObject.tag == "Zombie") { 
     Attack(); 
    } 

    if (health == 0) { 
     Debug.Log("Die!"); 
     Lose(); 
     } 
    } 

function Attack() { 
    health -= attack; 
    Debug.Log("Under attack!"); 
    audio.PlayOneShot(scream); 
    yield WaitForSeconds(delay); 
    Loop(); 
} 

function Loop() { 
    OnTriggerEnter(); 
} 

function Lose() { 
    this.active = false; 
} 

我的腳本檢測 「ZombieFlame」,而不是 「殭屍」。 gameObjects已經有了標籤,所以我不知道發生了什麼。它也像Trigger一樣被檢查。

+0

「Transform has the tag」 - 我不明白這是什麼意思。 –

+0

什麼是你使用的所有GameObjects的配置? –

+0

我的英語不好...我試着說「變換已經有標籤」 – gecko

回答

1

您沒有在函數函數OnTriggerEnter()中傳遞任何參數。它應該有一個collider參數。像這樣使用 -

function OnTriggerEnter (other : Collider) { 
    if (other.gameObject.tag == "ZombieFlame") { 
     gameObject.Find("Flame").SendMessage("OnTriggerEnter"); 
//It may give error for the Flame's OnTriggerEnter() function without 
//parameter. I don't really get why are you sending message to Flame. 
//You can remove this if the Flame has script attached containing 
//OnTriggerEnter(other : Collider). And check if 'other' is this player or 
//other gameobject collider as this function. It will give you more control. 
    } 

    if (other.gameObject.tag == "Zombie") { 
     Attack(); 
    } 

    if (health == 0) 
     Debug.Log("Die!"); 
     Lose(); 
    } 
} 
+0

我已經嘗試過...我收到一個錯誤: 從方法Health.OnTriggerEnter(UnityEngine.Collider)的最佳重載是與參數列表'()'不兼容。 – gecko

+0

健康課程是怎樣的?你在哪一行得到錯誤?我認爲你必須改變很多東西在這裏和那裏工作。 –

+0

你說得對......問題在於函數Loop。 我要創建一個布爾狀態「isAttacked」...我不太瞭解這些,但感謝您的幫助。問候。 – gecko