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

- C#
- +1 ещё
Как проверять столкновение префаба и UI панели в Unity?
- 1 подписчик
- вчера
- 39 просмотров

- Linux
- +1 ещё
Почему не отображаются иконки и текст редактора?
- 1 подписчик
- 05 янв.
- 75 просмотров

- C#
- +1 ещё
Как сделать нормальное приземление после переворота в Geometry Dash на Unity?
- 1 подписчик
- 03 янв.
- 176 просмотров

- Unity
Как исправить дальность отрисовки объектов в Unity?
- 1 подписчик
- 03 янв.
- 21 просмотр

- C#
- +1 ещё
Как создать батут в юнити для Geometry Dash?
- 1 подписчик
- 02 янв.
- 47 просмотров

- Unity
Что лучше использовать для создания мультиплеера в Unity?
- 1 подписчик
- 02 янв.
- 48 просмотров

- Unity
Почему при создании Merge игры невозможно спавнить новых юнитов на месте старых после их слияния?
- 1 подписчик
- 02 янв.
- 42 просмотра

- Unity
Как вывести счёт на экран?
- 1 подписчик
- 31 дек. 2023
- 59 просмотров

- C#
- +1 ещё
Что за странная ошибка при слоях в Unity?
- 1 подписчик
- 31 дек. 2023
- 40 просмотров

- 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 сен 2017GameObject[] enemies = GameObject.FindGameObjectsWithTag( "Enemy"); foreach( GameObject enemy in enemies) GameObject.Destroy( enemy);
#5
19:58, 21 сен 2017А причем тут факториалы? Чтобы найти нужный об.ект, достаточно раз по списку пройти. Или там какой то особенный извращенный способ?
#6
20:25, 21 сен 2017Denadan
> GameObject[] enemies = GameObject.FindGameObjectsWithTag(«Enemy»);
>
> foreach(GameObject enemy in enemies)
> GameObject.Destroy(enemy);А можно изменять коллекцию во время foreach?
#7
21:07, 21 сен 2017obrez
при том что если у тебя несколько ботов, на что номекает while — поиск будет производится заново по всем объектам для каждого из них. а поиск по всем объектам в юнити очень тормознутый и не рекомендуется для «повсеместного» использованияalt3d
хз почему упомянут я, но нет нельзя. но дестрой не изменяет коллекцию, он даже не уничтожает объект — просто помечает его для удаления(что в данном случае не важно, даже если использовать DestroyImmediate — у нас остается нетронутой оригинальная коллекция, пусть и некоторые её члены указывают на уничтоженные объекты). вот если добавить что-то типа enemies.Remove(enemy), тогда работать не будет#8
21:24, 21 сен 2017find тяжелый. Его в принципе не рекомендуется использовать в массовом порядке.
Лучше регистрировать юниты в массиве на старте, и через массив же удалять.#9
21:25, 21 сен 2017Denadan
И в чем проблема для 4 ботов и 100 об.ектов?#10
21:26, 21 сен 2017obrez
> Или юнька настолько тормозная?)
не настолько
просто если хочешь сделать что-то быстро — применяй быстрые способы это сделать
GameObject.Find не для этого сделан
он ещё так умеет, например: GameObject.Find(«/landscape/platform/bot») ,т.е. «умный» поиск по иерархии явно более трудоемок, чем тебе требуетсявыше верно советуют, во-первых не перебирать 100500 раз, а получить сразу список всех и по нему уже проходить, а во-вторых метод FindGameObjectsWithTag, который попроще, и соответственно производительней Find (не забудь тэги проставить объектам)
#11
21:27, 21 сен 2017obrez
я чуть поправил пост, и уже пару раз ответили пока правил -_-#12
8:59, 22 сен 2017Find тяжелый, понятно.
А почему while(Find) валит юньку, а 4 раза подряд Find нет, не понятно 🙂#13
12:48, 22 сен 2017obrez
> А почему while(Find) валит юньку, а 4 раза подряд Find нет, не понятно 🙂
А почему 100500 раз подряд Find валит юньку, а 4 раза подряд Find нет. дуй в документацию и изучай как работает «while»
тебе выше все описали. но не судьба походу догнать#14
13:12, 22 сен 2017DenBraun
Описали невнятно, потому и не понятно.