if (мышь не работает) {проверить, что интересующий меня объект существует, затем уничтожить его}
Ваш код не проверяет, что луч действительно попал в объект! Или, в этом отношении, даже выполняя приведение луча, чтобы увидеть, готов ли его что-нибудь вообще.
if (hit2Up.collider != null || hit2Bottom.collider != null)
Черт возьми, я должен надеяться, что это правда, прежде чем твой код когда-либо запускается. Эта проверка бесполезна.
if (hit2Up.collider.tag == "TagName2" || hit2Bottom.collider.tag == "TagName2")
Полагаю, это будет либо всегда верно, либо всегда ложно. Учитывая, что ваш код уничтожает объект, я подозреваю, что это правда. Эта проверка бесполезна.
Что вы должны сделать:
- Вызовите
Physics.raycast
, используя параметр out RaycastHit
(это будет заключено в оператор if, если вы ничего не нажали, нет необходимости выполнять какие-либо дополнительные проверки)
- Убедитесь, что
hit.collider == hitUp.collider
Вам также не нужны два скрипта для этого, достаточно того же, который использовался дважды с разными значениями.
Пример реализации:
string tagName;
Update() {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit)) {
if(hit.collider.CompareTag(tagName)) {
Debug.Log("You touched " + tagName);
destroy(hit.collider.gameObject);
}
}
}
Примечание: если вы используете физику 2D, вам нужно использовать RaycastHit2D
и Physics2D
соответственно. 2D и 3D физические движки никак не взаимодействуют.