Если поле public static, то оно не отображается в инспекторе, даже если добавить [SerializeField].
Собственно вопрос как это сделать?
Через customEditor скрипт скорее всего можно. Но непонятно зачем.
PS. Ещё можно через обычное поле и OnValidate
PPS. Только оно не засериализуется, если что.
FalconVVS
> Но непонятно зачем.
не ужели не бывало ситуации когда группа экземпляров одного класса использует какой то один префаб?
FalconVVS
> OnValidate
можно по подробнее как это относится к вопросу?
Public static означает что объект назначился один раз на всю жизнь программы (не сцены), поэтому логично, что не отображается. Чтото делаешь не так, если нужен public static Gameobject (100% говнокод)
DedoK
В onvalidate из обычного поля присваивает в статическую переменную, если там null и в само поле, если в статической переменной не null. Как оно себя поведет если в разных объектах оно разное - непредсказуемо. Но поскольку единственное разумное использование которое я вижу - это какая-то отладка прям в инспекторе - проблем быть не должно.
MANAB
Осталось понять какое время жизни объекта и статической переменной, когда нажимаешь play и как оно должно повести себя. И тогда вообще становится непонятно чего хочется получить.
MANAB
> Public static означает что объект назначился один раз на всю жизнь программы
да, так и есть.
Упрощённый пример, например класс Юнити, иногда генерерирует префаб Ракета. Эта ракета у всех классов Юнит одинаковая, как сделать?
DedoK
А сериализация в этом примере зачем нужна? Хотя через статик переменную все равно не стоит.
DedoK
> Упрощённый пример, например класс Юнити, иногда генерерирует префаб Ракета. Эта
> ракета у всех классов Юнит одинаковая, как сделать?
Юнит же сам создаётся из префаба? Соответственно, достаточно задать ракету в этом префабе, и у всех экземпляров она и так будет одинаковая. Не надо для этого ссылку на ракету делать статической.
Можно ещё круче сделать - все постоянные параметры юнита (включая тип снаряда) вынести в ScriptableObject, назвать его класс как-нибудь вроде "UnitData". Тогда в самом юните будет только ссылка на экземпляр объекта с данными (который лежит где-нибудь в ассетах) и всё.
BooTheJudge
> ScriptableObject
хотел в начале указать что не пишите про это, считаю что это выбивает вобще из самой концепции префабов.
BooTheJudge
> Соответственно, достаточно задать ракету в этом префабе
согласен, только как, можно подробнее?
DedoK
Есть большая разница между одинаковый и один и тот же префаб ракеты. Если каждый юнит создаст префаб ракеты, они будут одинаковые, но это разные объекты с разными позициями и летят по разной траектории.
Если будет один и тот же обьект на всех юнитов то кто им управляет и где он находится?
Класс не равно объект.
MANAB
> Есть большая разница
да конечно.
ссылка у Юнитов одинаковая на префаб в проекте, а потом когда стреляем то Instantiate(Ракета); т е ссылка не на объект в игре, а на префаб в проекте
по сути я могу использовать Resources.Load, но хотелось бы просто перетаскивать в нужное поле
Ну если очень хочется так, тогда реально, кастомный редактор в инспекторе с присвоением в статик поле и сериализуемое. И в OnValidate при null - заносим туда из своего, при не нулл - берём из статика. Один раз обойти все префабы или сделать реимпорт на ресурсы и дальше будет работать.
FalconVVS
не хочу кастомить редактор из за такой ерунды
Тема в архиве.