2014-11-26 3 views
2

В моей игре npc предполагает атаковать и уничтожать дом, который назначается в качестве цели в скрипте, но когда дом разрушен, ошибка говорит о том, что отсутствует ссылка, которую я ожидал ...Проблема с отсутствием ссылки после того, как объект gameObject уничтожен

Но как я могу это исправить? Есть ли способ отключить целевую переменную после уничтожения объекта gameObject?

этот кусок кода на ВСНП сценария

void Start() { 

    force = 1000; 
    enemyHealth = 100; 
    enemyAttack = 20; 
    enemyDefense = 2; 
    bigFont= new GUIStyle(); 
    bigFont.fontSize = 20; 

    target = GameObject.FindGameObjectWithTag("Player").transform; 
    targetHouse = GameObject.FindGameObjectWithTag("house").transform; 



    animator = GetComponent<Animator>(); 
} 

это на домашнем сценарии

void Update() { 
    if(houseHp<= 0){ 
     Destroy(GameObject.FindWithTag("house")); 
    } 
} 

ответ

0

Вы можете проверить на null и избежать проблемы.

GameObject temp = GameObject.FindGameObjectWithTag("house"); 

if(temp != null) 
    targetHouse = temp.transform; 

Так что, когда house разрушается FindGameObjectWithTag() вернется null.

+0

я попытался вставить этот код, но он не работает, просто уточнить, увидеть, если им делать это правильно: // я объявить переменную Temp общественного геймобжекты темп; // затем присвоить его значение при запуске void Start() { temp = GameObject.FindGameObjectWithTag ("casa"); } // оператор if должен быть вставлен где? примечание: im, использующий FSMStates с enum –

+0

@GabrielFerraz 'temp' должен быть объявлен правильно там, где я его помещаю, внутри функции, например' Start() 'или' Update() '. Это означает, что вы бы поместили мой код везде, где вы уже делали этот кусок кода: 'targetHouse = GameObject.FindGameObjectWithTag (" house "). Transform;' – FunctionR