Как передать параметры ScriptableObject'у

Программирование на Юнити.

Как передать параметры ScriptableObject'у

Сообщение ffinder 03 апр 2009, 12:06

Пишу загрузчик уровней из своего формата (от старой игрушки). Написал скрипт. Наследую от ScriptableObject. В меню добавился. Запускается, читает байты из файла, создает GameObject.CreatePrimitive(PrimitiveType.Cube), расставляет в нужных местах, красит каждого в свой цвет и т.д.
Только вместо кубиков надо создавать префабы (уже есть настроенные).
Пишу EditorUtility.InstantiatePrefab(brick). Brick объявлен как public GameObject.
А на brick в редакторе поле не добавляется :-(
Вопрос: как указать/найти из скрипта/еще как нибудь нужные префабы?
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение Neodrop 03 апр 2009, 12:13

1. Можно ввести их переменными в скрипт.
2. Можно находить их оригиналы в сцене и копировать (инстансировать).
3. Можно грузить из Resources. (Resources.Load)

Это ты пишешь Wizard? Класс EditorUtility не работает runtime. Только в Редакторе.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение ffinder 03 апр 2009, 12:51

задача скрипта - создать новую сцену в редакторе из данных внешнего файла. потом файл уже не используется никогда.
1. они и введены переменными
Код: Выделить всё
class LevelImporter(ScriptableObject):
   private reader as System.IO.BinaryReader
   public BrickStatic as GameObject
   public BrickLong as GameObject

но в редакторе их не видно.
2. инстанцировать я и хочу. но как их найти не знаю.
3. грузить из ресурсов не нужно.
ScriptableObject это даже не визард, а просто скрипт. Можно сделать wizard, но префабов много (~15), и для каждого запуска скрипта (уровней 50 штук) забодаешся мышкой тыкать и выбирать.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение Neodrop 03 апр 2009, 12:56

Странный синтаксис. Я бы объявлял переменные без as.

Код: Выделить всё
public GameObject BrickStatic;
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение ffinder 03 апр 2009, 15:41

синтаксис нормальный, потому что это Boo
конкретизирую проблему: как искать объект из скрипта для редактора?
при попытке инстанцирования кидает исключение NullPointerException:the prefab you want to instantiate is null.
писал и GameObject.Instantiate(BrickStatic) и EditorUtility.InstantiatePrefab(BrickStatic)
объект искал и так: BrickStatic = GameObject.Find("BrickStatic")
и так: BrickStatic = GameObject.FindGameObjectWithTag("static") - тэг даже новый создал и присвоил префабу.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение Neodrop 03 апр 2009, 16:03

И что? Не находит?
Может быть загрузка еще не произошла к моменту поиска? Поробуй использовать задержку. yield
Загрузка производится в отдельном потоке и код может продолжить выполнение, не дожидаясь возврата ф-ции.
Можно так :
Код: Выделить всё
yield LoadMyObjectsToScene();
BrickStatic = GameObject.Find("BrickStatic");
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение Const_47 04 апр 2009, 05:22

Цели совершенно другие, но вопрос тоже был актуален.

Скорее всего дело действительно в загрузке.

Вот такой тест
Код: Выделить всё
function Start(){
var prefab= Resources.Load("test");
Instantiate (prefab, Vector3(0, 0, 0), Quaternion.identity);
}

Отлично.

А теперь вот так
Код: Выделить всё
function Start(){
var prefab= Resources.Load("test!2!");//понятно префаба с таким именем нет в папке Resources
Instantiate (prefab, Vector3(0, 0, 0), Quaternion.identity);
}


кидает исключение
NullReferenceException: The prefab you want to instantiate is null.
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: Как передать параметры ScriptableObject'у

Сообщение ffinder 04 апр 2009, 12:04

мужики, какая загрузка???
скрипт запускается в редакторе, а не в игре.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение Neodrop 04 апр 2009, 12:25

Не имеет значения. Ведь ты же грузишь свои префабы с диска? Любая (что сетевая, что с диска) загрузка идет в отдельном потоке. Приложение ее не ждет.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение ffinder 04 апр 2009, 13:34

нет, префабы в скрипте я не гружу. в скрипте я читаю только файл с координатами и цветами куда созданные объекты ставить.
а префабы загружаются вместе с редактором.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение Neodrop 04 апр 2009, 13:37

Уф... Не имеет значения. Я же написал выше ("все, что угодно, что грузится, грузится в отдельном потоке").
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Как передать параметры ScriptableObject'у

Сообщение Const_47 04 апр 2009, 14:57

а префабы загружаются вместе с редактором.


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

Такое исключения как у тебя или у меня, говорит о том что нет прототипа от которого можно инстансить.
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15