7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
1 | |
Сделать переменную видимой в инспекторе14.05.2019, 22:17. Показов 13744. Ответов 34
Метки нет (Все метки)
Возможно ли сделать публичную переменную в классе, унаследованном от MonoBehaviour, хранящую кастомный тип, НЕ унаследованный от MonoBehaviour, видимой в инспекторе?
0
|
14.05.2019, 22:17 | |
Ответы с готовыми решениями:
34
Скрыть переменную в инспекторе Не могу сделать видимой переменную Сделать переменную видимой для других классов Сделать переменную видимой для всех страниц |
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
14.05.2019, 22:44 [ТС] | 3 |
Не знал про [System.Serializable] перед классом, проблема решилась добавлением этой строки, благодарю.
Добавлено через 4 минуты Прошу прощения, юнити пролагнула и поле, почему то, на момент показалось в инспекторе, от того и написал ответ, на деле же всё равно не появляется, что с serializable перед классом, что нет. Структура такая: есть (названия вымышленные) класс А от MonoBehaviour, в нём есть поле Public B b, где класс B - не унаследован от MonoBehaviour, и не могу заставить появиться эту переменную b в инспекторе, что бы была возможность её задавать через инспектор
0
|
3353 / 1769 / 1025
Регистрация: 26.10.2018
Сообщений: 5,198
|
|
14.05.2019, 22:56 | 4 |
Даже не знаю в чем проблема, может твой класс находится в другом проекте или сборке?
https://www.youtube.com/watch?... e=youtu.be
1
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
14.05.2019, 23:04 [ТС] | 5 |
Ну, исходя из этого видео могу предположить, что проблема в том, что мой не-унаследованный класс - абстрактный, ибо это класс предмета и я собираюсь от него наследовать конкретные предметы и их уже класть в переменную, разве что я ушёл от компа, пока проверить этот факт, что проблема в абстрактности, не могу
Добавлено через 1 минуту Просто по логике, без вызова конструктора, в переменной не должно быть объекта, а на видео он в инспекторе сразу появляется готовый
0
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
14.05.2019, 23:11 [ТС] | 7 |
Есть тогда идеи как это обойти? Как получить возможность выбрать какой объект будет лежать в переменной при запуске? С наименьшими затратами производительности и удобства использования
0
|
295 / 244 / 128
Регистрация: 24.12.2014
Сообщений: 708
|
|
14.05.2019, 23:29 | 8 |
да:
1) не использовать абстрактный класс; 2) использовать конкретный не абстрактный класс-наследник вместо базового; Как по мне, то каждый раз настраивать предметы в инспекторе только лишняя трата времени.
0
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
14.05.2019, 23:30 [ТС] | 9 |
Если, допустим, написать енум со всеми объектами в формате item_box = typeof(Item_Box) и после чего в функции start унаследованного класса через Activator создавать и присваивать объект (самое удобное, что я придумал), то нужно будет так каждый написанный объект добавлять в перечисление, что не очень удобно, есть другие варианты?
0
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
15.05.2019, 00:12 [ТС] | 11 |
Потому что я только что узнал про него и прочитал пару статей как я понял, это тот же monobehaviour, только без возможности добавить его как компонент и без соответствующих этому функций, вроде update, start, ontriggerstay и т.п., верно?
0
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
15.05.2019, 00:35 [ТС] | 13 |
У меня, если кратко, есть скрипт Item_Dropped, хранящий в себе Item,который является абстрактным классом и от которого надо наследовать конкретные предметы, а после чего выставить на сцене объекты с Item_Dropped и просто перетащить в скрипты какой именно предмет в том или ином объекте я хочу, потому так не прокатит
Добавлено через 53 секунды Это, если что, в ответ на пункты про «не использовать абстрактный класс», просто не нашёл как цитировать, сидя с телефона Добавлено через 2 минуты Учитывая очевидное удобство ScriptableObject в данной ситуации, тогда может есть какая то возможность ещё и запихнуть несколько таких объектов в один файл и выбирать в Юнити какой именно класс я хочу повесить в скрипт? (Что бы не создавать под сотню отдельных файлов под разные предметы, хотя, возможно, стоит так делать, потому пока просто интересуюсь)
0
|
3353 / 1769 / 1025
Регистрация: 26.10.2018
Сообщений: 5,198
|
|
15.05.2019, 00:37 | 14 |
Абстрактный класс ничем не отличается от обычного, кроме того что нельзя создать экземпляр, просто убери слово абстракт и наследуй дальше как от базового.
Добавлено через 1 минуту Не понял, что куда запихнуть?
1
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
||||||||||||||||
15.05.2019, 01:26 [ТС] | 15 | |||||||||||||||
Знаю, что ничем не отличается, к счастью в ООП я не слаб (надеюсь :D), но класс абстрактный для невозможности случайно создать его экземпляр и для возможности объявления абстрактных методов и свойств в нем, а они нужны мне абстрактными для того что бы, при наследовании, не забыть их описать (а то бывало, забываешь, а потом пару дней разбираешься, почему без ошибок и работает не так код)
Добавлено через 3 минуты ну, по факту меня интересует возможность положить в переменную типа Item у скрипта Item_Dropped (лежащего в каком-либо объекте) тот или иной объект, унаследованный от этого самого Item, так вот можно, как я понимаю (учитывая, что Item унаследован от ScriptableObject), создавать по скрипту (по файлу) на каждый такой унаследованный от Item класс и затем, перетаскивая этот скрипт на соответствующее поле у Item_Dropped в инспекторе у объекта задавать что там будет лежать, но можно ли как то сделать так, что бы все классы, унаследованные от Item - были прописаны в одном файле? мне, просто, кажется так будет экономнее и удобнее, учитывая, что каждый индивидуальный предмет не слишком то и большим куском кода описывается Добавлено через 13 минут Хм. Попробовал сделать абстрактный класс Item унаследованным от ScriptableObject, поле этого типа действительно появилось в скрипте Item_Dropped, но вот не абстрактный Item_Box, унаследованный от Item (даже в отдельном файле с таким же именем Item_Box.cs) всё равно не получается перетащить на поле у скрипта, что бы положить туда именно этот объект Добавлено через 4 минуты Перейду к конкретике: ItemContainer.cs:
0
|
3353 / 1769 / 1025
Регистрация: 26.10.2018
Сообщений: 5,198
|
|||||||||||
15.05.2019, 01:55 | 16 | ||||||||||
1
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
15.05.2019, 02:01 [ТС] | 17 |
Благодарю за подобное решение, мне как раз и не требуется, что бы свойства отображались, мне только что бы можно было указать конкретный объект. Мне б ещё только понять что происходит в
[CreateAssetMenu(fileName = "Item_Box", menuName = "Items/Item_Box", order = 0)]
0
|
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410
|
|
15.05.2019, 03:17 [ТС] | 20 |
что бы можно было распихать один и тот же скрипт ItemContainer по разным объектам, а затем в каждый из них положить свой конкретный предмет, т.е. объект, унаследованный от абстрактного Item, раз положить, значит это должен быть ассет (из ассетов же перетаскиваем, допустим, префаб, когда нужно скрипту указать что создавать), а поскольку предметов может быть очень много, пихать их в разные скрипты не очень, потому и нужен был способ, озвученный вами про автоматическое создание ассетов из скрипта
0
|
15.05.2019, 03:17 | |
15.05.2019, 03:17 | |
Помогаю со студенческими работами здесь
20
Можно ли сделать переменную видимой на нескольких формах? Как сделать переменную видимой для оператора goto Как сделать кнопку видимой-не видимой? Как сделать свойство которое было бы видно в инспекторе объектов? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |