Как правильно обращаться к другой функции скриптов? - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь вызвать функцию dieAnim () в одном скрипте из другого скрипта, который называется Magnum.

Это моя функция Fire в скрипте Magnum:

if (hit.collider.tag == "Alien1")
{
    Alien.dieAnim();
}

В сценарии Alien:

public void dieAnim()
{
    Destroy(gameObject);
}

Каждый раз, когда я пытаюсь выполнить это, он говорит, что ссылка на объект не установлена ​​на экземпляр объекта.

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Просто переписайте свой код для следующего

if (hit.collider.tag == "Alien1")
{
    hit.collider.GetComponent<Alien>().dieAnim();
}

Но если dieAnim делает only , то уничтожает пришельца, которого ударили, вам не нужнодля этого вызвать функцию внутри другого скрипта - это overkill .

Просто сделайте это

if (hit.collider.tag == "Alien1")
{
     Destroy(hit.gameObject);
}
0 голосов
/ 20 февраля 2019

Чтобы выполнить это более эффективно, выполните

if(hit.collider.CompareTag("Alien1")){
    //either
    Destroy(hit.gameObject);
    //or if there is logic in dieAnim()
    hit.collider.GetComponent<Alien>().dieAnim();
}

Причина, по которой ваш код не работал, заключался в том, что вы вызывали функцию dieAnim (), как если бы она работала со статическим компонентом.Это означает, что вы пытались вызвать это на всех сценариях в основном.Вы должны иметь ссылку на тот случай инопланетянина, которого вы ударили.CompareTag - это просто специальная функция, которая позволяет сравнивать теги игровых объектов быстрее и эффективнее, чем сравнение строк ==.

0 голосов
/ 20 февраля 2019

В приведенном выше примере похоже, что вы пытаетесь вызвать dieAnim () из имени класса Alien

. Вы захотите использовать

hit.collider.gameobject.GetComponent<desiredcomponent>().dieAnim();

.доступ к экземпляру класса Alien в качестве компонента.

Для ясности отредактируйте.

В редакторе, когда вы добавляете скрипт, вы добавляете новое монобихевое поведение.Они прикрепляются к игровому объекту как компоненты.Поэтому, когда вы хотите получить доступ к одному, у вас есть доступ к компонентам игрового объекта.

Таким образом, в вашем случае, чтобы получить другой скрипт, вам нужно вызвать компонент get для вашего игрового объекта, которого ударил ваш коллайдер.Тег также прикреплен к самому игровому объекту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...