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

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

  • автор:

Префабы (Prefabs)

Довольно удобно работать с GameObject в сцене, добавляя компоненты и изменяя их значения на нужные вам в инспекторе. Однако, это может создать ряд проблем в таких случаях, когда вы работаете над созданием NPC, объектом или предметом, который многократно встречается в сцене. Вы, конечно, можете просто скопировать эти объекты для создания дубликатов, но все они будут редактироваться независимо друг от друга. Обычно вы желаете, чтобы все экземпляры отдельно взятого объекта имели одинаковые значения свойств, чтобы при редактировании одного такого объекта в сцене вам не пришлось повторно вносить те же изменения и во все остальные копии.

К счастью, в Unity можно создавать префабы . Это особый тип ассетов, позволяющий хранить весь GameObject со всеми компонентами и значениями свойств. Префаб выступает в роли шаблона для создания экземпляров хранимого объекта в сцене. Любые изменения в префабе немедленно отражаются и на всех его экземплярах, при этом вы можете переопределять компоненты и настройки для каждого экземпляра в отдельности.

Важно: Когда вы перетаскиваете файловый ассет (например, меш) в сцену, будет создан новый экземпляр такого объекта и все такие экземпляры изменятся при изменении оригинального ассета. Однако, хоть его поведение и похоже, но ассет — это не префаб, так что у вас не выйдет добавить к нему компоненты или использовать любые другие описанные ниже свойства префабов.

Использование префабов

Вы можете создать префаб, выбрав Asset > Create Prefab и перетащив объект со сцены в “пустой” префаб, появившийся в проекте. После чего можно создавать экземпляры префаба просто перетаскивая его из окна Project на сцену. Имена объектов-экземпляров префабы, будут подсвечиваться синим в окне Hierarchy (имена обычных объектов имеют чёрный цвет).

Как уже упоминалось выше, изменения в префабе автоматически применятся ко всем её экземплярам, однако вы можете изменять и отдельные экземпляры. Это полезно например в случае, когда вы желаете создать несколько похожих NPC, но с внешними различиями, чтобы добавить реалистичности. Чтобы было чётко видно, что свойство в экземпляре префаба изменено, оно показывается в инспекторе жирным шрифтом (если к экземпляру префаба добавлен совершенно новый компонент, то все его свойства будут написаны жирным шрифтом).

Mesh Renderer на экземпляре префаба с переопределённым свойством Cast Shadows

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

Редактирование префаба из его экземпляров

Инспектор экземпляра префаба содержит три кнопки, которые у обычных объектов отсутствуют: Select (Выделить), Revert (Отменить) и Apply (Применить).

Кнопка Select выделяет файл префаба, из которого был получен данный экземпляр. Это позволяет быстро найти и отредактировать оригинальный префаб, применяя изменения ко всем его экземплярам. Однако, вы также можете сохранить переопределённые свойства из экземпляра в сам оригинальный префаб с помощью кнопки Apply (изменённые значения положения и вращения трансформации не применяются по очевидным причинам). Это позволяет эффективно редактировать все экземпляры через любой из них, и это быстрый и правильный способ вносить глобальные изменения. Если вы экспериментируете с переопределением свойств, но в итоге решаете, что изначальные свойства (заданные в префабе) для вас предпочтительнее, то вы можете отменить все сделанные переопределения с помощью кнопки Revert, вернув экземпляр в изначальное состояние.

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

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

Отслеживать

user302909

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

danil2283376 danil2283376

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

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

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

У меня есть массив объектов, я их спавню через 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); >> >
  • Вопрос задан более трёх лет назад
  • 135 просмотров

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

Kayler 06 янв 2011, 21:41

Прошу помощи, у меня возникло несколько проблем.
при выборе автомобиля в гараже, у меня создается клон префаба автомобиля, если нажать еще раз создается еще один клон префаба, эта проблема меня замучила. пробывал делать так:

определяю какой префаб выбрал через Transform, присваиваю его в переменную в которой храниться основная машина.
тоесть у меня несколько машин допустим.
машина1
машина2
при выборе машины сохраняю её в переменную «авто», при выборе другой машины переменная очищается, и сохраняется другая машина в переменную «авто».
при выборе очищается переменная но это не удаляет клон это я уже понял. тогда как сделать что бы удаляло?

и еще.. есть какой скрипт на блокировку клавиатуры в определенной сцене? а то у меня по гаражу машина катается.

Последний раз редактировалось Kayler 10 янв 2011, 16:14, всего редактировалось 1 раз.

Kayler Адепт Сообщения: 1038 Зарегистрирован: 25 авг 2010, 23:49 Откуда: Чувашия

Re: Удаление клона и создание нового

Zaicheg 06 янв 2011, 21:51

Я вас запомнил

Zaicheg Адепт Сообщения: 3024 Зарегистрирован: 19 июн 2009, 15:12 Откуда: Череповец

Re: Удаление клона и создание нового

Kayler 06 янв 2011, 22:06

Zaicheg писал(а): Я вас запомнил

Kayler Адепт Сообщения: 1038 Зарегистрирован: 25 авг 2010, 23:49 Откуда: Чувашия

Re: Удаление клона и создание нового

Kayler 06 янв 2011, 22:47

так мне никто не поможет?(

Kayler Адепт Сообщения: 1038 Зарегистрирован: 25 авг 2010, 23:49 Откуда: Чувашия

Re: Удаление клона и создание нового

clevermas 06 янв 2011, 23:52

Kayler, что я понял из Вашего объяснения, так это Вам перед очищение переменной «авто» не хватает функции удалить префаб: DestroyImmediate(auto1). При этом создается клон нового префаба Instantiate(auto2, auto2.position, auto2.rotation) и т.д. Внимание, при задатии переменным auto1, auto2. autoN используйте тип GameObject, на который перетаскиваете префабы.
Всю документацию можно посмотреть здесь:
http://unity3d.com/support/documentatio . Reference/
Вот ссылки на обе функции
http://unity3d.com/support/documentatio . stroy.html
http://unity3d.com/support/documentatio . tiate.html

Насчет клавиатуры
Если я правильно понял Вас, за это отвечает класс Input.OnKeyDown(. )

clevermas UNец Сообщения: 10 Зарегистрирован: 31 дек 2010, 15:35

Re: Удаление клона и создание нового

Kayler 08 янв 2011, 20:20

блин я запутался.

у меня машин несколько, а вот слотов в гараже 2.

тоесть при покупке автомобиля, в переменную slot1 присваивается значение auto1.
при покупке другой машины присваивается в переменную slot2 значение auto2 и т.д.

но, отображение машины в гараже может быть только одно. тоесть при выборе между slot1 и slot2 происходит присваивание в переменную slot значение auto1 или auto2 в зависимости от выбранного. таким образом в переменной slot может быть только одна машина и в гараже будет отображаться только одна машина.

допустим я назначил в GameObject auto; префаб авто. дальше я его покупаю, сохраняю в slot1 но не могу присвоить в slot. GameObject slot=null; не получается, юнити ругается, выдает:

Assets/Interface.cs(121,76): error CS0029: Cannot implicitly convert type `UnityEngine.GameObject’ to `UnityEngine.Transform’

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

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