Учитывая, что
.GetComponent<Image>();
Может вернуть null без уведомлений, но не сработает, если объект найден не будет, у вас может быть одно из:
а) Объект не найден вообще и ошибка на эту строку указывает;
б) Не найден компонент;
в) Компонент был удалён в промежутке между созданием объекта и вызовом метода столкновения.
Рекомендую вам взять на вооружение замечательную функцию вкладки Inspector: режим Debug.
Сперва проверьте, получается ли полем
crosshairImage ссылка на Image. Затем удостоверьтесь, что она остаётся на месте до и в момент столкновения. Если она не находится, то одно из двух:
а) у вас есть несколько объектов с указанным тегом и первым находится объект без Image
б) она создаётся после попытки её найти, пример: другой класс в Start её создаёт, но этот старт вызывается раньше. В настройках проекта это можно исправить (порядок выполнения скриптов).
Если она теряется, значит нужно посмотреть ваши скрипты, сами по себе ссылки могут теряться только внешним воздействием, вроде космических излучений, но вероятность сего события исчезающе мала.