@Ad1yar

Как найти Image в Unity3D?

Я тут пытался сделать чтобы при попаданий в противника выходила картинка где показано что ты попал в него, итак вот пример:
private Image crosshairImage;

    void Start()
    {
        crosshairImage = GameObject.FindGameObjectWithTag("Crosshair").GetComponent<Image>();
    }

    private void OnCollisionEnter(Collision other)
    {
        if (other.gameObject.tag == "Bullet")
        {
            crosshairImage.enabled = true;
        }
    }

и мне в консоль выдают ошибку: Object reference not set to an instance of an object
помогите плиз
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
Значит объекта нет или коллизия раньше сработала, как мы тут можем помочь, ты даже строку где ошибка не укзаал.
Ответ написан
@Ezekiel4
Охотник на пиратов и сборщик монолитов
Учитывая, что
.GetComponent<Image>();
Может вернуть null без уведомлений, но не сработает, если объект найден не будет, у вас может быть одно из:
а) Объект не найден вообще и ошибка на эту строку указывает;
б) Не найден компонент;
в) Компонент был удалён в промежутке между созданием объекта и вызовом метода столкновения.

Рекомендую вам взять на вооружение замечательную функцию вкладки Inspector: режим Debug.
Пример, компонент Image

64177f43a8eb0086475123.png


Сперва проверьте, получается ли полем crosshairImage ссылка на Image. Затем удостоверьтесь, что она остаётся на месте до и в момент столкновения. Если она не находится, то одно из двух:
а) у вас есть несколько объектов с указанным тегом и первым находится объект без Image
б) она создаётся после попытки её найти, пример: другой класс в Start её создаёт, но этот старт вызывается раньше. В настройках проекта это можно исправить (порядок выполнения скриптов).

Если она теряется, значит нужно посмотреть ваши скрипты, сами по себе ссылки могут теряться только внешним воздействием, вроде космических излучений, но вероятность сего события исчезающе мала.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы