UnityФорумПрограммирование

Как статичному полю назначить префаб?

Страницы: 1 2 3 4 5 Следующая »
#0
20:53, 21 дек 2023

Если поле public static, то оно не отображается в инспекторе,  даже если добавить [SerializeField].

Собственно вопрос как это сделать?

#1
20:57, 21 дек 2023

Через customEditor скрипт скорее всего можно. Но непонятно зачем.

PS. Ещё можно через обычное поле и OnValidate
PPS. Только оно не засериализуется, если что.

#2
21:09, 21 дек 2023

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

FalconVVS
> OnValidate
можно по подробнее как это относится к вопросу?

#3
21:13, 21 дек 2023

Public static означает что объект назначился один раз на всю жизнь программы (не сцены), поэтому логично, что не отображается. Чтото делаешь не так, если нужен public static Gameobject (100% говнокод)

#4
21:19, 21 дек 2023

DedoK
В onvalidate из обычного поля присваивает в статическую переменную, если там null и в само поле, если в статической переменной не null. Как оно себя поведет если в разных объектах оно разное - непредсказуемо. Но поскольку единственное разумное использование которое я вижу - это какая-то отладка прям в инспекторе - проблем быть не должно.

#5
21:21, 21 дек 2023

MANAB
Осталось понять какое время жизни объекта и статической переменной, когда нажимаешь play и как оно должно повести себя. И тогда вообще становится непонятно чего хочется получить.

#6
21:21, 21 дек 2023

MANAB
> Public static означает что объект назначился один раз на всю жизнь программы
да, так и есть.

Упрощённый пример, например класс Юнити, иногда генерерирует префаб Ракета. Эта ракета у всех классов Юнит одинаковая, как сделать?

#7
21:31, 21 дек 2023

DedoK
А сериализация в этом примере зачем нужна? Хотя через статик переменную все равно не стоит.

#8
21:32, 21 дек 2023

DedoK
> Упрощённый пример, например класс Юнити, иногда генерерирует префаб Ракета. Эта
> ракета у всех классов Юнит одинаковая, как сделать?
Юнит же сам создаётся из префаба? Соответственно, достаточно задать ракету в этом префабе, и у всех экземпляров она и так будет одинаковая. Не надо для этого ссылку на ракету делать статической.
Можно ещё круче сделать - все постоянные параметры юнита (включая тип снаряда) вынести в ScriptableObject, назвать его класс как-нибудь вроде "UnitData". Тогда в самом юните будет только ссылка на экземпляр объекта с данными (который лежит где-нибудь в ассетах) и всё.

#9
21:37, 21 дек 2023

BooTheJudge
> ScriptableObject
хотел в начале указать что не пишите про это, считаю что это выбивает вобще из самой концепции префабов.

BooTheJudge
> Соответственно, достаточно задать ракету в этом префабе
согласен, только как, можно подробнее?

#10
21:48, 21 дек 2023

DedoK
Есть большая разница между одинаковый и один и тот же префаб ракеты. Если каждый юнит создаст префаб ракеты, они будут одинаковые, но это разные объекты с разными позициями и летят по разной траектории.
Если будет один и тот же обьект на всех юнитов то кто им управляет и где он находится?
Класс не равно объект.

#11
21:54, 21 дек 2023

MANAB
> Есть большая разница
да конечно.

ссылка у Юнитов одинаковая на префаб в проекте, а потом когда стреляем то Instantiate(Ракета); т е ссылка не на объект в игре, а на префаб в проекте

#12
22:07, 21 дек 2023

по сути я могу использовать  Resources.Load, но хотелось бы просто перетаскивать в нужное поле

#13
22:13, 21 дек 2023

Ну если очень хочется так, тогда реально, кастомный редактор в инспекторе с присвоением в статик поле и сериализуемое. И в OnValidate при null - заносим туда из своего, при не нулл - берём из статика. Один раз обойти все префабы или сделать реимпорт на ресурсы и дальше будет работать.

#14
22:35, 21 дек 2023

FalconVVS
не хочу кастомить редактор из за такой ерунды

Страницы: 1 2 3 4 5 Следующая »
UnityФорумПрограммирование

Тема в архиве.