@w1kenD

Как удалить объект при нажатии на него пальцем?

Пишу приложение на Unity под Android. Столкнулся с проблемой реализации функции удаления prefab-оф, которые я уже добавил на плоскость.

Вот функция где я создаю этот объект, в моем случае prefab модельки.
void ShowMarkerAndSetObject()
    {
        List<ARRaycastHit> hits = new List<ARRaycastHit>();
        ARRaycastManagerScript.Raycast(new Vector2(Screen.width / 2, Screen.height / 2), hits, TrackableType.Planes);

        // show marker
        if (hits.Count > 0)
        {
            PlaneMarkerPrefab.transform.position = hits[0].pose.position;
            PlaneMarkerPrefab.SetActive(true);
        }

        // set object
        if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began)
        {
            Instantiate(ObjectToSpawn, hits[0].pose.position, ObjectToSpawn.transform.rotation);
            ChooseObject = false;
            PlaneMarkerPrefab.SetActive(false);
        }
    }


а вот начатая функция по удалению
void DeleteObject()
    {
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            TouchPosition = touch.position;

            if (touch.phase == TouchPhase.Began)
            {
                // луч, в котором фиксируем объекты в месте где мы коснулись пальцем
                Ray ray = ARCamera.ScreenPointToRay(touch.position);
                RaycastHit hitObject;

                // условие, что мы пересекли объекты
                if (Physics.Raycast(ray, out hitObject))
                {
                    Destroy(hitObject.transform.ObjectToSpawn);
                }
            }
        }
    }

Но так не работает или я что-то не так делаю. Помоги пожалуйста понять как это сделать??? Либо подскажите как можно полностью всю сцену от всех префабов зачистить, чтобы плоскость пустая была?
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
red-cat-fat
@red-cat-fat
студент
RayCast работает на физике, так что у объекта, который ты хочешь "поймать" в рейкаст - должен иметь коллайдер, чтобы задетектить пересечение. Он там есть?
Плюс ты удаляешь hitObject.transform.ObjectToSpawn, а не сам hitObject.collider.gameObject.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы