forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   AssetDatabase.LoadAssetAtPath (http://forum.boolean.name/showthread.php?t=20387)

ABTOMAT 29.08.2016 00:27

AssetDatabase.LoadAssetAtPath
 
Господа знатоки!
Известно, что AssetDatabase.LoadAssetAtPath позволяет загрузить ассет по указанному пути (пусть даже он и не в папке Resources).
Работает только в редакторе. Использую частенько, но вот беда: загруженные ассеты не помнят, откуда они взялись (теряют связь с префабом).
В принципе мне это (пока) не критично, но хотелось бы связь не профукивать.

Внимание вопрос: как загрузить ассет в сцену, который лежит не в Resources и при этом не похерить его связь с префабом?

Заодно у буржуев тему поднял: http://answers.unity3d.com/questions...instances.html

pax 29.08.2016 05:05

Ответ: AssetDatabase.LoadAssetAtPath
 
Возможно тебе нужна функция PrefabUtility.InstantiatePrefab

ABTOMAT 02.09.2016 22:58

Ответ: AssetDatabase.LoadAssetAtPath
 
Цитата:

Сообщение от pax (Сообщение 308172)
Возможно тебе нужна функция PrefabUtility.InstantiatePrefab

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

seaman 03.09.2016 22:45

Ответ: AssetDatabase.LoadAssetAtPath
 
Он инстанцирует то что укажешь. В мануале пример инстанцирования выбранного объекта. Выбирать можно в проекте, а не только в иерархии.

ABTOMAT 04.09.2016 00:35

Ответ: AssetDatabase.LoadAssetAtPath
 
Цитата:

Сообщение от seaman (Сообщение 308291)
Он инстанцирует то что укажешь. В мануале пример инстанцирования выбранного объекта. Выбирать можно в проекте, а не только в иерархии.

Каким образом передать выбранный в проекте ассет? Сначала думал, строку пути надо передать, но функция принимает аргумент типа Object. Или чего-то в справке не хватает?

seaman 12.10.2016 21:07

Ответ: AssetDatabase.LoadAssetAtPath
 
Цитата:

Каким образом передать выбранный в проекте ассет?
Тем же самым что в мануале. Копирую оттуда код...
PHP код:

static function CreatePrefab() {    
        var clone : 
GameObject PrefabUtility.InstantiatePrefab(Selection.activeObject as GameObject) as GameObject
    } 


ABTOMAT 12.10.2016 21:26

Ответ: AssetDatabase.LoadAssetAtPath
 
Цитата:

Сообщение от seaman (Сообщение 309184)
Тем же самым что в мануале. Копирую оттуда код...
PHP код:

static function CreatePrefab() {    
        var clone : 
GameObject PrefabUtility.InstantiatePrefab(Selection.activeObject as GameObject) as GameObject
    } 


Спасибо за копирование кода из мануала, я его и сам там давно прочитал.
Здесь предлагается передать выделенный в сцене объект.
В сцене у меня ещё нет ни одного такого префаба.

Антихрист 13.10.2016 00:17

Ответ: AssetDatabase.LoadAssetAtPath
 
Код:

string path = "Assets/TestFolder/TestPrefab.prefab";
Object objTemp = AssetDatabase.LoadAssetAtPath(path,typeof(Object));
GameObject newObject = PrefabUtility.InstantiatePrefab(objTemp) as GameObject;


Антихрист 13.10.2016 19:08

Ответ: AssetDatabase.LoadAssetAtPath
 
Помогло,не?

ABTOMAT 14.10.2016 00:23

Ответ: AssetDatabase.LoadAssetAtPath
 
Спасибо за ответ, прочитал днём, но ещё не имел возможности проверить.
У меня сомнения что-то насчёт этого способа.

Код:

AssetDatabase.LoadAssetAtPath(path,typeof(Object));
Уже не помнит связи с префабом.
Почему PrefabUtility.InstantiatePrefab(objTemp) должно "оживить" её?
Мне казалось, результатом действия этого кода выйдет то, что "префабом" будет считаться FBX'ина моделек.

Но — проверю — обязательно отпишу.
Если заработает, будет очень круто.

pax 14.10.2016 12:14

Ответ: AssetDatabase.LoadAssetAtPath
 
Я бы в данном случае использовал функцию AssetDatabase.LoadMainAssetAtPath.

Ну и более правильно так (обратить внимание на последнюю строчку):
PHP код:

var path "Assets/TestFolder/TestPrefab.prefab";
var 
objTemp AssetDatabase.LoadMainAssetAtPath(path);
var 
newObject PrefabUtility.InstantiatePrefab(objTemp) as GameObject;
Undo.RegisterCreatedObjectUndo(newObject,"Instantiate Prefab"); 



Часовой пояс GMT +4, время: 14:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot