|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
29.08.2016, 00:27
|
#1
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
AssetDatabase.LoadAssetAtPath
Господа знатоки!
Известно, что AssetDatabase.LoadAssetAtPath позволяет загрузить ассет по указанному пути (пусть даже он и не в папке Resources).
Работает только в редакторе. Использую частенько, но вот беда: загруженные ассеты не помнят, откуда они взялись (теряют связь с префабом).
В принципе мне это (пока) не критично, но хотелось бы связь не профукивать.
Внимание вопрос: как загрузить ассет в сцену, который лежит не в Resources и при этом не похерить его связь с префабом?
Заодно у буржуев тему поднял: http://answers.unity3d.com/questions...instances.html
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
29.08.2016, 05:05
|
#2
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.09.2016, 22:58
|
#3
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
Сообщение от pax
|
Насколько я выяснил, префаб уже должен быть в сцене, чтобы его можно было заинстансить этой функцией, так? Увы, у меня в сцене изначально их нет.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
03.09.2016, 22:45
|
#4
|
Знающий
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений (для 180 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
Он инстанцирует то что укажешь. В мануале пример инстанцирования выбранного объекта. Выбирать можно в проекте, а не только в иерархии.
|
(Offline)
|
|
04.09.2016, 00:35
|
#5
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
Сообщение от seaman
Он инстанцирует то что укажешь. В мануале пример инстанцирования выбранного объекта. Выбирать можно в проекте, а не только в иерархии.
|
Каким образом передать выбранный в проекте ассет? Сначала думал, строку пути надо передать, но функция принимает аргумент типа Object. Или чего-то в справке не хватает?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
12.10.2016, 21:07
|
#6
|
Знающий
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений (для 180 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
Каким образом передать выбранный в проекте ассет?
|
Тем же самым что в мануале. Копирую оттуда код...
static function CreatePrefab() { var clone : GameObject = PrefabUtility.InstantiatePrefab(Selection.activeObject as GameObject) as GameObject; }
|
(Offline)
|
|
12.10.2016, 21:26
|
#7
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
Сообщение от seaman
Тем же самым что в мануале. Копирую оттуда код...
static function CreatePrefab() { var clone : GameObject = PrefabUtility.InstantiatePrefab(Selection.activeObject as GameObject) as GameObject; }
|
Спасибо за копирование кода из мануала, я его и сам там давно прочитал.
Здесь предлагается передать выделенный в сцене объект.
В сцене у меня ещё нет ни одного такого префаба.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
13.10.2016, 00:17
|
#8
|
Разработчик
Регистрация: 20.01.2007
Сообщений: 485
Написано 182 полезных сообщений (для 412 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
string path = "Assets/TestFolder/TestPrefab.prefab";
Object objTemp = AssetDatabase.LoadAssetAtPath(path,typeof(Object));
GameObject newObject = PrefabUtility.InstantiatePrefab(objTemp) as GameObject;
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.10.2016, 19:08
|
#9
|
Разработчик
Регистрация: 20.01.2007
Сообщений: 485
Написано 182 полезных сообщений (для 412 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
Помогло,не?
|
(Offline)
|
|
14.10.2016, 00:23
|
#10
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
Спасибо за ответ, прочитал днём, но ещё не имел возможности проверить.
У меня сомнения что-то насчёт этого способа.
AssetDatabase.LoadAssetAtPath(path,typeof(Object));
Уже не помнит связи с префабом.
Почему PrefabUtility.InstantiatePrefab(objTemp) должно "оживить" её?
Мне казалось, результатом действия этого кода выйдет то, что "префабом" будет считаться FBX'ина моделек.
Но — проверю — обязательно отпишу.
Если заработает, будет очень круто.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.10.2016, 12:14
|
#11
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: AssetDatabase.LoadAssetAtPath
Я бы в данном случае использовал функцию AssetDatabase.LoadMainAssetAtPath.
Ну и более правильно так (обратить внимание на последнюю строчку):
var path = "Assets/TestFolder/TestPrefab.prefab"; var objTemp = AssetDatabase.LoadMainAssetAtPath(path); var newObject = PrefabUtility.InstantiatePrefab(objTemp) as GameObject; Undo.RegisterCreatedObjectUndo(newObject,"Instantiate Prefab");
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:31.
|