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

Как удалить клон префаба в unity

  • автор:

Удаление клона префаба

Проблема в следующем: я имею list префабов различных моделей. Мне необходимо для каждого префаба создать еще 1 копию, каждую повернуть на 90 и сохранить в списке.

По сути можно просто создать для каждой модели по 2 префаба (с 0 и 90 градусами), но хочу это реализовать именно через код.

Я создаю клон, поворачиваю и добавляю в список. Но после мне необходимо клон удалить со сцены (ну или создать клон без появления его на сцене). Однако удаляется сам объект, а не его клон и его дальнейшее клонирование невозможно (появляется соответствующая ошибка)

1 2 3 4 5 6 7 8 9 10
public ListTileLogic> TilePrefabs;//Массив префабов for (int i = 0; i  Count; i++) { TileLogic Clone; Clone = Instantiate(TilePrefabs[i]); Clone.Rot90();//Функция поворота на 90 градусов TilePrefabs.Add(Clone); Destroy(Clone.gameObject); }

Пробовал писать код вот так:

1 2 3 4 5 6 7 8 9
public ListTileLogic> TilePrefabs;//Массив префабов for (int i = 0; i  Count; i++) { TileLogic Clone; Clone = TilePrefabs[i]; Clone.Rot90();//Функция поворота на 90 градусов TilePrefabs.Add(Clone); }

Но тогда идет поворот не клона (которого и нет), а префаба и в список добавляется точно такой же объект.

Как мне удалить эти временные клоны?

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как отнять хп у клона, а не у его префаба? c#
Как сделать так чтобы у клона снималось хп? А то я делаю делаю, и не могу понять и что делать если.

уничтожение клона c#
И вот у меня ошибка после того как удаляется клон: MissingReferenceException: The object of type.

Kонструирование клона объекта
Всем Доброго Дня или Ночи! Я вот тут начал читать книги по Java. И у меня возник вопрос. Может кому.

как убить клона?
Добрый день! Впервые сталкиваюсь, с подобной проблемой, поэтому прошу ответить как можно.

3339 / 1761 / 1019
Регистрация: 26.10.2018
Сообщений: 5,174

Ты создаешь клона из префаба и удаляешь клона, все правильно, что не так? Клон и объект это одно и тоже.

Регистрация: 12.04.2019
Сообщений: 48

Я пробовал запустить проект — создались мои «временные клоны», потом выполнялся остальной код — я создаю карту из этих моделей. Так вот, пока эти временные клоны находятся на сцене — все в порядке, карта создается как надо. Если вручную на сцене удалить мои «временные клоны» — вылезет соответствующая ошибка.

Получается эти якобы клоны на сцене являются объектами и будущие клоны создаются с них. Но они лишнии на сцене и как от них избавиться не могу придумать

3339 / 1761 / 1019
Регистрация: 26.10.2018
Сообщений: 5,174
Просто отключи https://docs.unity3d.com/Scrip. ctive.html
Регистрация: 12.04.2019
Сообщений: 48

Я уже так пробовал. Прога тогда создает дезактивированные клоны
По сути я создаю что-то типа нового префаба и любые махинации с ним влияют на будущие клоны

3339 / 1761 / 1019
Регистрация: 26.10.2018
Сообщений: 5,174
Ну а в чем проблема включить новый клон обратно? 1 строчка кода же.
Регистрация: 12.04.2019
Сообщений: 48

Так это нужно сначала тогда полностью построить карту, а потом их выключать, но это не решение проблемы. Нужно, чтобы они с самого начала не было видны

691 / 459 / 205
Регистрация: 05.04.2015
Сообщений: 1,897

Не понимаю зачем вы складываете созданные на сцене объекты в лист с префабами. Создайте отдельный список. Может в этом ошибка

Регистрация: 12.04.2019
Сообщений: 48

Так я что хочу сделать — у меня есть моделька тайла и если ее повернуть на 90 градусов, то этот будет совсем другой тайл. Таким образом на примере ниже я могу из одной и той же модели создать 4 разных тайла.

Через код я хочу из префаба создать еще 3 тайла, повернутых на 90, 180 и 270 соответственно. Как это сделать? Я создал 3 клона, повернул каждый и добавил в общий список префабов, с которым программа потом отлично работает и не жалуется. Но после добавления этих 3 тайлов в список они остаются на сцене.

И как решить данную задачу без добавления их на сцену?

691 / 459 / 205
Регистрация: 05.04.2015
Сообщений: 1,897

Лучший ответ

Сообщение было отмечено Adm178 как решение

Решение

Массив перфабов у вас пускай хранит префабы. А объекты которые вы создаете это копии префабов. Если она попала на сцену, то она отличается от префаба. У нее появляются свойства такие как поворот на сцене, позиция на сцене. Мировые ххарактеристики. Зачем их обратно в префабы пихать это уже другие элементы. Надо в отдельный массив. И оттуда удалять.Тоесть вам надо 4 копии создавать и крутить все 4 последняя все равно встанет на 360 градусов. Или первую не крутить.

1 2 3 4 5 6 7 8 9 10 11 12 13
Vector3[] pos = new Vector3[]{new Vector3(0, 0, 0), new Vector3(0, 0, 1), new Vector(1, 0, 1), new Vector(1, 0, 0)}; public ListGameObject> objectsOnScene = new ListGameObject>(); public ListTileLogic> TilePrefabs;//Массив префабов Collider collider; for (int i = 0; i  4; i++) { TileLogic Clone; Clone = Instantiate(TilePrefabs[0]); collider = Clone.GetComponentCollider>(); Clone.Rot90();//Функция поворота на 90 градусов Clone.transform.position = pos[i] * collider.bounds.size.x; objectsOnScene.Add(Clone); }

Почему Удаляется новый заспавненый объект?

У меня есть массив объектов, я их спавню через InvokeRepeating, и мне надо удалять объект когда он дотронется колладера.
Я создаю клон префаба объекта, потом этот клон когда дотрагивается коллайдера, то он не удаляется, а удаляется тот клон, который только что заспавнился в другом месте, нигде не могу найти решения, помогите, пожалуйста

using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemSpawn : MonoBehaviour < public GameObject[] clothes; //объекты, кторые надо спавнить public Transform objspawn;// координата для спавна public float spawnrate;//частота спавна public float speed;// скорость движения объекта public int rand;//рандом для clothes public GameObject duplObj; //клон clothes public int i; void Start() < //спавн объектов через заданное время spawnrate InvokeRepeating("SpawnObj", 1f, spawnrate); >void Update() < i = rand; >void SpawnObj() < //сам спавн rand = Random.Range(0, clothes.Length); //тут создается клон объекта duplObj= Instantiate(clothes[i], objspawn.position, transform.rotation); >>

ItemMovement.cs, который прикреплен к объекту

using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemMovement : MonoBehaviour < ItemSpawn itemSpawn; void Start() < itemSpawn = GameObject.Find("Main Camera").GetComponent();//для определения нахождения скрипта на объекте > private void FixedUpdate() < transform.Translate(itemSpawn.speed * Time.deltaTime, 0, 0);//движение объекта >//Здесь происходит уничтожение клона, если он соприкасается с объектом, у которого тег Destroy private void OnTriggerEnter2D(Collider2D collis) < if (collis.gameObject.tag == "Destroy") < Destroy(itemSpawn.duplObj); >> >
  • Вопрос задан более трёх лет назад
  • 126 просмотров

Как уничтожить клон префаба?

Создаю взрывы префабом, в котором сидит Particle System.
Префаб загружаю через Instantiate.

var clone = Instantiate(particlePostavilObject, correctForm.transform.position, correctForm.transform.rotation) as GameObject; Destroy(clone);

Взрыв проходит, а клон префаба из иерархии не уничтожается.
Пробовал по разному через Destroy, не получается удалить клон.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как изменить цвет у префаба?
Делаю так, пребаф к примеру состроит из таких компонентов Tree — пустой объект, так же добавил.

Как отнять хп у клона, а не у его префаба? c#
Как сделать так чтобы у клона снималось хп? А то я делаю делаю, и не могу понять и что делать если.

Как сделать слежение за мышкой префаба?
Пример таков — нажимаю построить к примеру дерево, когда я вожу по сцене то там где я вожу.

Как получить копию префаба unity?
Здравствуйте, мне нужно получить копию префаба(до этого я пытался помещать префаб на сцену и.

3339 / 1761 / 1019
Регистрация: 26.10.2018
Сообщений: 5,174

particlePostavilObject это какой тип? GameObject? Если нет, то при касте будет null. Тогда дестрой надо вызывать так:
Destroy(clone.gameObject);

Регистрация: 17.08.2020
Сообщений: 20
Да, это GameObject
250 / 186 / 68
Регистрация: 04.03.2019
Сообщений: 1,010
Injenerker, может вы чтото не то дестроите?
Регистрация: 17.08.2020
Сообщений: 20
Спасибо всем, все получилось, через Destroy(clone.gameObject)
143 / 130 / 30
Регистрация: 26.07.2017
Сообщений: 633

В самом партикле можно задать автоматическое уничтожение после окончания анимации, если это не зацикленый партикл.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как создать объект из префаба с начальными параметрами?
Добрый вечер. Вопрос по Unity3D. При создании объекта (префаб) как проще сразу занести в скрипт.

Как создать элемент GUI на основе префаба?
Необходимо динамически создать N элементов интерфейса (в данном случае кнопок). Создаю префаб.

Unity как редактировать отдельный компонент префаба через скрипт
имеется префаб Player,мне нужно изменять компоненты Gun1 и Gun2 во время игры, тоесть заменять на.

Как уничтожить объект на сцене?
В сцене есть два скрипта уничтожения машинки. Оба работают, когда она приближается близко к кубу.

Создание сцены как префаба
Добрый день, уважаемые программисты. Не могли бы вы, пожалуйста, подсказать мне как в коде создать.

Как уничтожить форму?
В программе создаю форму для редактирования справочника цехов. FShop:=TFShop.Create(FMain);В самой.

Как удалить клон префаба созданный в скрипте. Unity

Хочу что бы при стрельбе на сцене появлялся префаб выстрела, и через промежуток времени он исчез, но получается, как я понял, что я указал ссылку на префаб, и когда я создаю его в сцене он не создает сам префаб с ссылкой, а клонирует его, помогите исправить.Код который относится к снаряду, в методе Attack создал объект и через некоторое время его удаляю, но он не удаляется В иерархии видно что создался клон префаба

Отслеживать

user302909

задан 13 янв 2020 в 14:11

danil2283376 danil2283376

43 1 1 серебряный знак 10 10 бронзовых знаков

Код желательно приводить картинкой, а не скриншотом. Префаб к скрипту вы откуда цепляете, со сцены или с вкладки Project?

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

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