Как удалить объект в unity
Перейти к содержимому

Как удалить объект в unity

  • автор:

Как удалить объект при касании другого объекта в юнити 3д?

c#

  • C#
  • +1 ещё

Как проверять столкновение префаба и UI панели в Unity?

  • 1 подписчик
  • вчера
  • 39 просмотров

linux

  • Linux
  • +1 ещё

Почему не отображаются иконки и текст редактора?

  • 1 подписчик
  • 05 янв.
  • 75 просмотров

c#

  • C#
  • +1 ещё

Как сделать нормальное приземление после переворота в Geometry Dash на Unity?

  • 1 подписчик
  • 03 янв.
  • 176 просмотров

unity

  • Unity

Как исправить дальность отрисовки объектов в Unity?

  • 1 подписчик
  • 03 янв.
  • 21 просмотр

c#

  • C#
  • +1 ещё

Как создать батут в юнити для Geometry Dash?

  • 1 подписчик
  • 02 янв.
  • 47 просмотров

unity

  • Unity

Что лучше использовать для создания мультиплеера в Unity?

  • 1 подписчик
  • 02 янв.
  • 48 просмотров

unity

  • Unity

Почему при создании Merge игры невозможно спавнить новых юнитов на месте старых после их слияния?

  • 1 подписчик
  • 02 янв.
  • 42 просмотра

unity

  • Unity

Как вывести счёт на экран?

  • 1 подписчик
  • 31 дек. 2023
  • 59 просмотров

c#

  • C#
  • +1 ещё

Что за странная ошибка при слоях в Unity?

  • 1 подписчик
  • 31 дек. 2023
  • 40 просмотров

c#

  • C#
  • +2 ещё

Юнити выдаёт ошибку cs0103, что делать?

  • 1 подписчик
  • 30 дек. 2023
  • 51 просмотр

WellFLow • Ростов-на-Дону

от 10 000 до 50 000 ₽

от 30 000 до 50 000 ₽

от 40 000 до 60 000 ₽

10 янв. 2024, в 00:09

1000 руб./за проект

09 янв. 2024, в 23:39

50000 руб./за проект

09 янв. 2024, в 22:51

10000 руб./за проект

Минуточку внимания

Присоединяйтесь к сообществу, чтобы узнавать новое и делиться знаниями

  • Отличается ли з/п в США для кандидатов находящиеся на территории США или за её пределами?
    • 2 подписчика
    • 2 ответа
    • 2 подписчика
    • 1 ответ
    • 2 подписчика
    • 0 ответов
    • 2 подписчика
    • 3 ответа
    • 2 подписчика
    • 2 ответа
    • 2 подписчика
    • 1 ответ
    • 2 подписчика
    • 1 ответ
    • 2 подписчика
    • 1 ответ
    • 2 подписчика
    • 1 ответ
    • 3 подписчика
    • 2 ответа

    Удаление объекта Unity

    Есть сфера и есть куб. Как сделать так, чтобы при столкновении с кубом сфера удалялась? На куб повесил такой скрипт, но он удаляет сам куб:

    private void OnCollisionEnter(Collision collision)

    Отслеживать
    71.9k 12 12 золотых знаков 91 91 серебряный знак 180 180 бронзовых знаков
    задан 24 сен 2017 в 11:53
    anton ruban anton ruban
    11 1 1 серебряный знак 6 6 бронзовых знаков

    2 ответа 2

    Сортировка: Сброс на вариант по умолчанию

    if (collision.gameObject.name == "SPHERE_NAME")
    if (collision.gameObject.CompareTag("SPHERE_TAG") < // if(collision.gameObject.tag == "SPHERE_TAG") Destroy(collision.gameObject); >

    Отслеживать
    ответ дан 24 сен 2017 в 12:11
    Алексей Шиманский Алексей Шиманский
    71.9k 12 12 золотых знаков 91 91 серебряный знак 180 180 бронзовых знаков

    Проверка не обязательна. В твоем случае код будет следующий

    private void OnCollisionEnter(Collision collision)

    Отслеживать
    ответ дан 24 сен 2017 в 18:42
    Назар Крупа Назар Крупа
    43 4 4 бронзовых знака

    почему же проверка не обязательна? вот добавит он еще предметы (или просто тут упрощенно вопрос описал) и всё «Халк. Круши!»?

    24 сен 2017 в 21:37

    В вопросе не указано ограничение по тегу. Я изменил код чтобы удалялась сфера, зачем усложнять для человека?)

    25 сен 2017 в 7:01

    Затем, что это неверно. Потому что на сцене может быть что угодно с коллайдером. даже банально земля или стена. И заранее человек обрекается на неправильную логику и внезапные проблемы.

    25 сен 2017 в 7:04
    Ну в общем я не спорю что с тегом будет верно.
    25 сен 2017 в 7:10
    спасибо большое за помощь
    26 сен 2017 в 12:05

    • c#
    • unity3d
      Важное на Мете
    Похожие

    Подписаться на ленту

    Лента вопроса

    Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

    Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.9.3159

    Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

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

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

    Вот функция где я создаю этот объект, в моем случае prefab модельки.

    void ShowMarkerAndSetObject() < Listhits = new List(); 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); >> > >

    Но так не работает или я что-то не так делаю. Помоги пожалуйста понять как это сделать. Либо подскажите как можно полностью всю сцену от всех префабов зачистить, чтобы плоскость пустая была?

    • Вопрос задан более двух лет назад
    • 531 просмотр

    1 комментарий

    Простой 1 комментарий

    unity c# удаление объектов в цикле

    Юнити подвисает когда пытаюсь удалить объекты в цикле, и начинается дикая утечка памяти.
    Что ей не нравится?

    GameObject p; while( p = GameObject.Find( "bot") ) < DestroyObject( p); >

    #1
    19:36, 21 сен 2017

    А чёго бы ему не тормозить, если ты 100500 раз по списку проходишь, почём зря ?

    for( var fooObj : GameObject in GameObject.FindGameObjectsWithTag( "foo")) < if( fooObj.name == "bar") < //Do something. > >

    #2
    19:44, 21 сен 2017

    А почему мой варик работать не хочет?
    Там порядка 100 объектов на сцене.
    Или юнька настолько тормозная?)

    #3
    19:49, 21 сен 2017

    хм.. прикинем.. 100!/(100-botcount)! = ?

    #4
    19:57, 21 сен 2017

    GameObject[] enemies = GameObject.FindGameObjectsWithTag( "Enemy"); foreach( GameObject enemy in enemies) GameObject.Destroy( enemy);

    #5
    19:58, 21 сен 2017

    А причем тут факториалы? Чтобы найти нужный об.ект, достаточно раз по списку пройти. Или там какой то особенный извращенный способ?

    #6
    20:25, 21 сен 2017

    Denadan
    > GameObject[] enemies = GameObject.FindGameObjectsWithTag(«Enemy»);
    >
    > foreach(GameObject enemy in enemies)
    > GameObject.Destroy(enemy);

    А можно изменять коллекцию во время foreach?

    #7
    21:07, 21 сен 2017

    obrez
    при том что если у тебя несколько ботов, на что номекает while — поиск будет производится заново по всем объектам для каждого из них. а поиск по всем объектам в юнити очень тормознутый и не рекомендуется для «повсеместного» использования

    alt3d
    хз почему упомянут я, но нет нельзя. но дестрой не изменяет коллекцию, он даже не уничтожает объект — просто помечает его для удаления(что в данном случае не важно, даже если использовать DestroyImmediate — у нас остается нетронутой оригинальная коллекция, пусть и некоторые её члены указывают на уничтоженные объекты). вот если добавить что-то типа enemies.Remove(enemy), тогда работать не будет

    #8
    21:24, 21 сен 2017

    find тяжелый. Его в принципе не рекомендуется использовать в массовом порядке.
    Лучше регистрировать юниты в массиве на старте, и через массив же удалять.

    #9
    21:25, 21 сен 2017

    Denadan
    И в чем проблема для 4 ботов и 100 об.ектов?

    #10
    21:26, 21 сен 2017

    obrez
    > Или юнька настолько тормозная?)
    не настолько
    просто если хочешь сделать что-то быстро — применяй быстрые способы это сделать
    GameObject.Find не для этого сделан
    он ещё так умеет, например: GameObject.Find(«/landscape/platform/bot») ,т.е. «умный» поиск по иерархии явно более трудоемок, чем тебе требуется

    выше верно советуют, во-первых не перебирать 100500 раз, а получить сразу список всех и по нему уже проходить, а во-вторых метод FindGameObjectsWithTag, который попроще, и соответственно производительней Find (не забудь тэги проставить объектам)

    #11
    21:27, 21 сен 2017

    obrez
    я чуть поправил пост, и уже пару раз ответили пока правил -_-

    #12
    8:59, 22 сен 2017

    Find тяжелый, понятно.
    А почему while(Find) валит юньку, а 4 раза подряд Find нет, не понятно 🙂

    #13
    12:48, 22 сен 2017

    obrez
    > А почему while(Find) валит юньку, а 4 раза подряд Find нет, не понятно 🙂
    А почему 100500 раз подряд Find валит юньку, а 4 раза подряд Find нет. дуй в документацию и изучай как работает «while»
    тебе выше все описали. но не судьба походу догнать

    #14
    13:12, 22 сен 2017

    DenBraun
    Описали невнятно, потому и не понятно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *