Для начала удостоверься что рейкаст действительно попадает по объекту с компонентом Target (попадаешь ли в область if по выставленному тобой условию). Проверь по чему попадает рейкаст, возможно просто на том месте, ближе к камере, есть другой объект с коллайдером, на котором он прерывается и не доходит до объекта с компонентом Target. Проверь действительно ли объект с компонентом ScoreKeeper на момент событий клика из класса Target активен/включен/enable.
Так же, для этой задачи, если ты не используешь новую InputSystem можешь посмотреть на эти методы(скриншот). Можно использовать их вместо использованного тобой рейкаста.
Немного не понимаю твою логику hit.collider == this.GetComponent<Collider> Ты говоришь "у объекта, в которого я попал, такой же колайдер как у меня"? Так он никогда и не зайдет сюда
Плюс тебе рейкаст надо делать в другом классе Какой-нибудь Raycaster (первое что пришло в голову) И туда пихаешь всю логику из Target и свое равенство == заменяешь на if(hit.collider.TryGetComponent(out Target target)
До инвока не дойдет в любом случае
Тут я видимо что-то не понимаю, почему?
Я же выше написал Он сравнивает колайдер куда попал и свой колайдер Как он может сам в себя попасть? Да и думаю ему это не надо
Кто сам в себя? Рейкаст не зависит никак из какого места был вызван.
Да причем тут рейкаст вообще, там дальше ещё одно условие есть
Ты про условие с hit?
2 раза же написал об этом)
В этом то и дела что хит это произвольное от рейкаста
Я тебя вообще не понимаю
А если рейкастить из центра объекта в первый попавшийся коллайдер, то коллайдер самого объекта не будет первым попавшимся? 🧐
Будет, насколько я помню, для этого небольшой офсет делаешь, откуда стреляешь
Результат рейкаста это структура hit, которая создаётся рейкастом. Если ты в компоненте вызовешь Рейкаст в сторону этого объект он выполнится так как он задумывал.
Не понимаю к чему ты ведёшь, у него не зайдет в условие, если только он сам в себя не попадет
Вопрос. Но это в любом случае похоже на баг, этого надо избегать, правильно настраивая layermask.
Ещё раз тут нет сам в себя. Компонент не стреляет рейкастами. Рейкаст это отдельная сущность, которая не зависит от место из которого вызвана.
А ты дебажил куда луч попадает?
А возможно ты просто не заметил, какой он рей пускает. Он кастит луч не от объекта в котором вызывается а он камера по ScreenPointToRay.
Куда нажал ЛКМ по экрану игры от камеры
Я имею ввиду, он вообще попадает? Может он попадает во что-то другое, а не в тот коллайдер, который ты хочешь
А ещё один вариант, может у тебя 2д игра а ты используешь Physic, а не Physic2D.
А, я что-то думал это у тебя проблема. х)
Если он попадет мышкой в коллайдер, который прикреплен объекту с со скриптом Target, то да
Вот я и говорю, надо продебажить и проверить) Если всë ок попадает, копать в сторону ивента уже
Ну в коде проблем не должно быть, с большей вероятностью у него проблема на самой сцене
А, ну да, я прокидывал просто префаб из папки, сейчас я сравниваю попадание по наличию компонента
Старый код тоже работает. Просто тебе надо сделать так что бы когда ты спавнишь новый таргет, у тебя была там же ссылка на текстовое поле, и компоненте тектового поля был иницализирующий публичный метод с помощью которого ты туда будет прокидывать именно новый инстанс. заспавленного объекта. Но если у тебя таргетов много такой подход не подойдет. Надо переделывать.
Обсуждают сегодня