|
|
|||||||||||||||||||||||||||||||
Оцените. Кастомные редакторы, которые мы используем в игре17.02.2018, 21:58. Показов 8098. Ответов 2
Метки custom inspectors, editorwindow, game development, gamedev, indie, indie gamedev, maze of adventures, propertydrawer, puzzle, unity, unity engine, unity3d (Все метки)
Unity - сказочный движок. Иногда эта сказка добрая, про пони и радугу. А иногда - про страшного бабайку. И очень важная часть данного движка, а именно расширения для редактора (custom inspectors) - как раз про бабайку. Ниже я бы хотел поделиться опытом использования собственных расширений на примере нашей игры. Буду рад если кому-то поможет или кто-нибудь даст дельное замечание.
В нашей, казалось бы, небольшой головоломке используется 22 собственных скрипта для расширений на ~2 500 строк кода в сумме. Приведу особо интересные примеры для каждого типа расширений (UnityEditor.PropertyDrawer, UnityEditor.EditorWindow, UnityEditor.Editor). PropertyDrawer Здесь, как раз, ничего сильно интересного у нас нет. Просто для примера - отображение свойства неактивным, если объект на сцене. И возможность редактировать свойство, если объект является префабом. code
Эта функция используется для свойств-идентификаторов объектов. Что-то типа ИД, необходимого для сериализации/десериализации структуры уровня. Защита от самого себя, чтобы не поменять идентификатор во время сборки уровня в редакторе. Если так сделать - уровень сохранится, но загружаться не будет. (см. изображение 1) Еще есть PropertyDrawer для класса “Координаты X и Y” - вместо двух строчек выводит в одну. Еще один - для отображения коллекции string в виде выпадающего списка. (см. изображение 2) EditorWindow Здесь уже интереснее. Кастомное окно у нас одно. Используется как основной способ редактирования уровня. Весь код я приводить, конечно, не буду. Из интересного можно выделить пару моментов. Первый - получение картинки-превью префаба. Т.е. той картинки, которая отображается в самом редакторе Unity. Реализуется с помощью одного метода AssetPreview.GetAssetPreview(gameObject) и возвращает объект Texture2D, который может быть использован в качестве контента для GUILayout.Button.
А вот так это выглядит в движении: ![]() Editor Здесь начинается самое интересное. Во первых, был реализован универсальный базовый кастомный эдитор, который выводит в начало своей верстки короткое информационное сообщение. Это может быть просто текст подсказки, предупреждение или сообщение об ошибке. В зависимости от типа сообщения, блок с текстом отображается индивидуально. Визуально выглядит так: ![]() Полный код редактора: code
Кстати, текст вверху эдитора можно выбрать мышкой и копировать, благодаря SelectableLabel. Дальше от него наследуются все остальные кастомные эдиторы. Самые “толстые” у нас - это ContentPackEditor, LevelEditor, LocalizationEditor, GameFieldEditor. Каждый от 200 до 300 строк кода. Опять же, приводить код каждого смысла не имеет. Расскажу только про интересные моменты. Для ContentPackEditor нужен был функционал визуальной сортировки элементов массива. И такой функционал в Unity есть, это ReorderableList в UnityEditorInternal. Вот статья по основам использования http://va.lent.in/unity-make-y... rablelist/ От себя я добавил сворачивание/разворачивание списка при клике на заголовок. code
(см. изображение 4) В LocalizationEditor надо было сделать что-то вроде таблицы, чтобы четные и нечетные сроки были разным цветом. Решается это заведением двух разных стилей, примерно так: code
Вторым проблемным моментом было сделать поиск в уже добавленных ключах локализации и мгновенный вывод результатов в виде выпадающего списка под строкой поиска. Вот для этого момента найти решение было действительно непросто. В итоге нашелся метод на каком-то китайском сайте с иероглифами. Хорошо, что код - он и в африке код. http://www.clonefactor.com/wordpress/public/1769/ Путем небольшой доработки напильником стало выглядеть все вот так: ![]() Собственно на этом все. В качестве вывода могу сказать, что расширения для редактора Unity - это очень и очень мощная штука. Пользоваться ей однозначно стоит. Правда перед этим нужно запастись терпением и навыком гуглить информацию на иностранных языках. Ну и картинка со всеми более менее интересными расширениями (см. изображение 5) Задавайте вопросы, критикуйте - буду рад обсудить
1
|
|||||||||||||||||||||||||||||||
| 17.02.2018, 21:58 | |
|
Ответы с готовыми решениями:
2
Какие вы знаете бесплатные визуальные редакторы, которые не тормозят работу сайта? Есть ли какие-нибудь редакторы HTML, которые позваляют без всяких заморочек привязывать БД к страницам? Оцените макет диалогового окна в игре |
|
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 557
|
|
| 18.02.2018, 21:33 | |
|
ImAlexSmith, похвально, что вы делитесь с участниками форума подобного рода информацией. Нет спора, что эти все расширения для вашего проекта полезны, но решая делать или не делать какое то расширения - нужно взвесить, востребовано ли оно насколько, что окупит время на внедрение этого расширения, не дублирует ли функционал уже предоставляемый движком, намного ли облегчит работу с проектом, кроме того новым участникам проекта даже хорошо знающим движок нужно будет еще вникнуть в особенности работы с расширением.
При обновлении версии движка расширения может поломаться, может от неправильной роботы пропасть ссылки назначенные через расширения итд) В общем случае все эти расширения ведут к еще большей зависимости проекта от движка, что считаю не есть хорошо. Посмотрев все эти окошка из кучей ссылок, всегда вспоминаю ситуацию, когда после обновления движка или не вовремя закоммиченого проекта и вылета в движке - могут слетать эти ссылки и потом, если проект большой приходится все вспоминать. По этому мое мнения, особенно для больших проектов - минимум связей между обьектами делать через инспектор и всякие расширения, делая эти связи кодом с правильной архитектурой проект становится намного гибче, более устойчив к обновлению движка и при любом сбое логи все прекрасно показывают.
0
|
|
|
|
|||||
| 19.02.2018, 12:20 [ТС] | |||||
![]()
0
|
|||||
| 19.02.2018, 12:20 | |
|
Помогаю со студенческими работами здесь
3
Как открыть файл которые используется в html5 игре Используем IE ) Используем Heap зачем мы используем цикл? Математический пример, используем if, switch Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|