2015-04-19 2 views
1

Я делаю простую игру для выживания зомби. У меня проблема с этим кодом, который обнаруживает только один триггер, но не другой.OnTriggerEnter не может обнаружить мой тег Transform

#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», но не «Zombie». У GameObjects уже есть тег, поэтому я не знаю, что происходит. Он также проверяется как Trigger.

+0

«У трансформации уже есть тег» - я не понимаю, что это значит. –

+0

Какова конфигурация всех используемых вами GameObjects? –

+0

My inglish bad ... Я попытался сказать «у трансформатора уже есть тег» – gecko

ответ

1

Вы не передаете какой-либо параметр в функции Function OnTriggerEnter(). Он должен иметь параметр коллайдера. Используйте вот так:

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

Смежные вопросы