🧩 Расширяем Unity: выполнение кода в редакторе
HTML-код
- Опубликовано: 11 июн 2024
- Разберём как, и главное зачем, можно исполнить свой код в редакторе Unity. Добавление своих меню, использование аттрибута ExecuteAlways, ограничения на поля в инспекторе, и множество других упрощающих разработку игр на Unity возможностей
Содержание:
0:00 - Введение
0:45 - Меню компонента
4:29 - Верхнее меню Unity
6:44 - Контекстное меню ассетов
8:44 - Аттрибут ExecuteAlways
12:43 - Скрипт RepeatingObject
15:03 - Ограничения на поле
16:16 - Заключение
Файл с кодом: gist.github.com/Glavak/f51157...
Patreon канала - / emeraldpowder
Наш Discord - / discord
На этом канале регулярно появляются новые видео, которые позволят тебе научиться создавать игры, или подарят новые идеи и вдохновение, если ты уже умеешь. Подписывайся!
Остались какие-то вопросы, пожелания, или идеи для других видео? Смело пиши в комментарии под видео
Спасибо, у вас интересный материал, из всех русскоязычных ютуберов ваш контент самый полезный, смотря на вас решился р свой канал завести.
Тебе стоит запастись рекламой, т.к контент реально хороший.
@@arturbier спасибо, но финансы не позволяют рекламу покупать пока) и Ютуб не особо в поиске мои ролики продвигает, так что имеем, что имеем)
@@regulargamedev3295 Ты пользуешься VidIQ? 🤔
@@stikulzon801 конечно)
Очень интересно про Editor, хочу еще. Для меня это самый полезный канал
Все по делу и без воды, автору спасибо :)
Очень крутая тема, спасибо за видео!
Автор красава!!! Хочется видосов про ИИ или Генетический алгоритм
Последний способ однозначно один из самых полезных
Интересно услышать от тебя про кастомные инспекторы) В интернете мало что есть
Огромное спасибо, очень полезно знать о таких функциях.
Как всегда шикарный видос
Очень годный контент!
урраа, новый видос))
Ура годный канал ожил!
Давайте набйом Emeraldy до нового года 50k (:
Спасибо!
Очень Круто!
Очень круто
Можно было еще рассказать про мега полезные кнопки прямо в инспекторе. Если, например, у объекта есть много компонентов, которые он должен получить через GetComponent, то вместо того, чтобы делать это каждый раз при старте, можно было бы привязать этот метод к кнопке и вызывать только один раз в редакторе
Чувак, ты лучший!
Классное видео, спасибо)
Очень полезно, спасибо
Очень круто
ставлю лайк не глядя
Топчик)))
вы профи!
За полезное видео луцк
Одно могу сказать точно. Кейс с рельсами очень даже актуальная тема.
Для пущей убедительности, еще бы прикрутиьь возможность модифицировать положение создаваемых обьеков по сплайну, что бы можно было спавнить не только ровные полосы обьектов, но и зацикливать или, на худой конец, спавнить в виде кривой
Ага, туда можно наворачивать уже всякие сплайны, чередование разных префабов, можно их размер по bounds получать, уже зависит от того какие модельки и чего хочется добиться
Енто боНба!!!
О кастомный инспектор был бы кстати мне сейчас )
Эмм... А вроде в Unity уже есть Clear All PlayerPrefs?
Ролик довольно старый, но вместо атрибута executeAlways можно использовать метод onValidate, вынести логику изменения в отдельный метод и вызывать его из OnValidate и из Update. Так будет вызываться только необходимое и отпадает надобность проверять включена ли игра или нет
А OnValidate для проверки некорректного заполнения полей не используешь?
В последнем примере для проверки полей инспектора вместо связки атрибута Execute Always и метода Update следует использовать метод OnValidate. Это обработчик событий, который реагирует на любые изменения в инспекторе компонента.
Да, в этом случае OnValidate будет более логично смотреться. Но в следующем видео расскажу про него поподробнее, в нём есть ещё один недостаток
8:44 - 15:03 - ровно на эту тему (как обновлять объект в зависимости от параметров, без запуска игры/play-mode)
сделал вчера видео (правда на английском языке): ruclips.net/video/KCDYdQUufhs/видео.html
Я не использую ExecuteAlways, а определяю свой инспектор, который отлавливает изменения и просит объект "адаптироваться".
ExecuteAlways подойдёт, где объекты простые и можно просто на каждом кадре даже во время игры подстраиваться под свойства (как в методе Update на 9:24).
Если же объекты более сложные, то подстраивать их на каждом кадре не вариант и лучше отлавливать изменения.
Для этого нужно либо:
1) Хранить предыдущий набор параметров (т.е. продублировать для каждого параметра ещё одно private поле, которое будет хранить предыдущее значение), и в Update сравнивать каждый параметр с его предыдущим значением, либо
2) Переопределить инспектор и отлавливать все изменения парой строчек, как я делаю в видео
В место always execute для генератора можно OnValidate заюзать
Как я понял ты сову на глобус надел с ним для валидации, но бывает)
Классное видео!) Тоже недавно записывал видос, как можно одной кнопкой заменить весь UI текст на TextMeshPro с сохранением всех параметров и закинуть их в список
Почти 40 тысяч, недавно было 5
И это очень круто, спасибо за это всем вам!
Для решения двух последней проблемы можно использовать OnValidate, более удобный и не захламляет Update, при этом его можно целиком обернуть в предифайн UNITY_EDITOR.
docs.unity3d.com/ScriptReference/MonoBehaviour.OnValidate.html
> при этом его можно целиком обернуть в предифайн UNITY_EDITOR
А есть смысл оборачивать?
Он же в любом случае будет вызываться только при изменении параметров в инспекторе
@@awesomegamedev
Особого смысла действительно нет, но вы просто не потащите этот кусок кода в билд, и получить визуальное выделение куска кода, что в некоторых случаях может быть удобным.
@@romankazarinov5261
> но вы просто не потащите этот кусок кода в билд
Это хорошо. Вопрос тогда, не выкинет ли Unity все подобные (исполняющиеся только в редакторе) методы автоматически?
@@awesomegamedev Юнити сама ничего не делает)) Уберет из билда лишь то, что обернуто в #if
@@romankazarinov5261 Понятно. Надеялся на более "умное/автоматическое" поведение.
Спасибо!
Сделай ролик про чат на photon. Било би интересно послушать.
Расскажите пожалуйста, про оптимизацию Unity игр.
Можно больше роликов про случайную генерацию мира, включая реки, деревья, горы, было бы хорошо сразу про 2д и 3д мир, например как в майнкрафте или террарии.
Есть много видео на английском, но хотелось бы на русском от тебя посмотреть и разбор послушать.
Слушай, а можешь с делать промокоды и там написал промокод и тебе дают там например валюту или что типо такого
Пожалуйста сделайте гайд по спавнингу префабов в эдиторе. (У меня есть игра где я пытаюсь сделать маленький редактор карт).
Я хочу выбирать префабы их спаунить на "полу, - карте" там где кликну мышкой, но делать это еще на этапе редакотра. Спасибо!
Снимите видео про некстген)
Так, ну вот рельсами и цветами может лучше использовать функцию onValidate? Я вот допустим часто юзаю эту штуку. Например для недавнего джема от дтф я под конец понял что кое-где я таки успеваю прикрутить звуки. Но вот для даже полудесятка префабов добавлять аудиоСорс было в лом (тем более там такая мешанина была с префабами так как спешил, тут мой косяк), то я просто добавил аудиосор как поле и проверял в валидате не нулл ли он и если нулл, создавал тут же и прикреплял. Потом только оставалось нужные клипы всем добавлять. Да можно было добавить как варик РекваерКомпонент, но тут в одной функции написал быстро, все добавилось и удалил)
А так спасибо за ролик. про контекстное меню прям на префабе не знал. Полезно )
Да, для цветов точно лучше onvalidate
У меня есть ещё сакральное знание про то как сделать авто-модификацию префабов или сцен, недавно потратил дня два чтобы разобраться как это правильно сделать. Чтобы например кнопка в верхнем меню, по нажатию скрипт проходит по всем префабам в папке levels, и везде например автоматом расставляет коллайдеры на объектах на определённом слое, или заменяет старую версию скрипта на новую. Или вот аудиосорсы накидвыает на объекты по каким-то правилам. Думаю про это тоже как-нибудь отдельное видео сделаю, не знаю насколько оно будет полезно
@@EmeraldPowder да, делал нечто такое. Из возможных косяков еще кстати надо проверять не вариант ли это префаба. Ошибок критических вроде не дает при сохранении изменений, но в консоль выводит красным что напрягает)
+ у себя я еще менял значения полей скрипта, а они были приватными и сериалайзнутыми. Если интересно и для будущего ролика могу скинуть.
@@EmeraldPowder github.com/AlexStraga87/FillMaskEditor
Если интересно глянуть. Я как весь день потратил пока докопался до всего Надеюсь онятно будет ил куда копать если понадобится.
@@EmeraldPowder Поскорее, пожалуйста. Мы скучаем
Про PropertyDrawer + кастомные атрибуты на поля расскажи.
Постараюсь впихнуть это в видео про кастомные инспекторы, вещь полезная, согласен
День добрый, не могу нигде найти как сделать вращение объекта при помощи мыши, например при подборе предмета необходимо рассмотреть его с разных сторон.
Если не трудно сделайте пожалуйста видео.
Круто, но я до этого недорос))
Тему по касцене запилите. В ютубе нет об этом видео.
Сделай пожалуйста серию уроков по шейдерам 2д для начинающих
покажи, как интегрировать игру на unity (webdl) в VK, с добавлением новых игроков в базу и получением оных при входе в игру... это сейчас вобще не найти... везде старые нерабочие коды
Спасибо за видео. Последний кейс можно легко сделать через OnValidate.(docs.unity3d.com/ScriptReference/MonoBehaviour.OnValidate.html)
OnValidate похоже реально тема.
Сделал буквально вчера видео на аналогичную тему (адаптация объектов под изменение параметров), но использовал кастомный инспектор (без ExecuteAlways).
OnValidate будет ещё проще. С другой стороны, у кастомного инспектора больше гибкости. Добавить кнопку "Recreate", как я делал, с помощью просто OnValidate уже не выйдет.
Спасибо что смотрите! Да, я почему-то решил что OnValidate в это видео не влезет, но для последнего кейса он точно лучше подходит
@@EmeraldPowder само название метода говорит за себя :)
Clear player prefs есть же в контексте, зачем ты его дублируешь?
Вот нашёл только когда выложил видео и увидел в комментах что оно уже есть) Не уверен когда его добавили, но когда я первый раз писал этот скрипт то точно ещё не было, и почему-то эта кнопка даже сейчас особо не гуглится
Что за редактор кода используете с аббревиатурой RD?
Rider
Привет! Я не занимаюсь геймдевом, но уже пару дней вынашиваю одну мысль. Возможно ли теоретически создать игру в стиле bullet hell, но наоборот, т.е. игрок должен своими пулями убить себя, а "враги" пытаются его остановить. Если возможно, то насколько это сложно в плане кода (например для новичка)?
Привет, теоритически конечно возможно. Именно технических сложностей тут нет, но я бы советовал для первых нескольких проектов не выбирать то что ещё никто не делал, чтобы было проще гуглить непонятные вещи и принимать решения, а потом уже браться за что-то своё
@@EmeraldPowder спасибо большое за совет
Здравствуйте, в моей игре открытый мир, несколько авто на сцене и персонаж, который может садиться в эти авто. Из-за того, что на сцене несколько авто (контроллер Realistic Car Controller), fps проседает. Как мне оптимизировать этот процесс, чтобы fps, сильно не проседал?
Отключать контроллер авто, если игрок не в этой машине?
А можно ли сделать скрипт, в который можно было бы перетаскивать не monobehaviour скрипты? Чтобы их поля были видны в инспекторе.
Например, чтобы собирать из заготовок нового персонажа, а не создавать отдельный скрипт для каждого нового персонажа.
Мне кажется если добавлять на объект очень много monobehaviour компонентов, это как то скажется на производительности.
В юнити вообще везде где можно перетаскивать, можно перетаскивать только объекты которые наследуются от UnityEngine.Object. Помимо MonoBehaviour это ещё ScriptableObject - возможно это то что нужно
Будут видео о разборе популярных игр?
Это скучно, вот если был разбор интересных механик - вот это интересно
@@blogigrodela дак в популярных играх и есть та самая интересная механика.
@@user-ie6tu5tz8r да не, многие игры могут иметь однотипоную механику, а недооценненные наоборот иметь кучу разных нововведений. Однако это крайний случай, поэтому я предлагаю именно выделять механики, вне зависимости от популярности
@@blogigrodela ок, но хотяб 1 видос в месяц про эту тему. 😊
Кстати есть у меня одно начатое видео подходящее под это описание, возможно я его раскопаю и доделаю скоро ;)
Уменя на пайтоне было такое переписал точ в точ код и не работает версия та сама
Запили пж шутер с мультиплером( я знаю что похожее было но всеже )
Ребят, кто может помочь? Я новичок в программировании и начал изучать С#. Компилятором выбрал райдер. Инфу в интернете найти не могу. Но у меня постоянно(почти) когда нажимаю на код включается инсерт. Не получается нормально что-то удалить или поставить вместо выделенного из-за инсерта(ну там прямоугольник белый мерцает на строке). И не получается копировать, вырезать и вставить с помощью горячих клавиш. В контекстном меню написано к примеру Ctrl + c, но когда пытаюсь копировать через клавиши , ничего не работает , но через контекстное меню работает. Кто может ,помогите пж.
Из каких книг берутся знания по написанию данного кода?
Все эти задачи, которые я предоставил как примеры, возникали у меня в процессе работы, и я долго гуглил как правильнее их решить. И решил собрать в видео, чтобы зрителям пришлось меньше гуглить, ну и чтобы знали что это возможно
А вообще по хорошему берутся из документации, но там не так хорошо эта часть юнити описана чтобы понять, только если вспомнить что уже знаешь
А что это за игра с поездами? Хотелось бы посмотреть на нее поближе, а то у меня то же есть игра про поезда.
Да один заброшенный прототип, думаю его мир не увидит
@@EmeraldPowder печально
А что за смайлик в названии видео?
Вроде как плагины-расширения иногда иконкой пазла обозначают. На видео со смайликами вроде всё-таки чаще кликают, по моим наблюдениям, так что стараюсь подбирать какой-нибудь подходящий :)
Халлоу, хотел спросить, а ты участвовал в 47 лудуме?
хотел поделиться нашей игрой, тк когда-то по твоим видео начинал осваивать юнити, а теперь во всю работаю на нем спустя год) ldjam.com/events/ludum-dare/47/pre-call
Не, я в этот раз не участвовал. Игра интересная, атмосферная! Приятно что кого-то вдохновляю)
Для редактора можно было бы заюзать ExecuteInEditMode коль речь о редакторе зашла.
Да, ExecuteAlways это то же что и ExecuteInEditMode, только для новой системы префабов, которая с 2018 версии где-то появилась
Что за редактор кода?
Чувак! ExecuteAlways, конечно, хорошо... Но! OnValidate для половины описанных здесь целей, куда лучше)))
Я его использовал, но потом однажды часа два искал из-за чего при каждом изменении в ассетах реимпортятся все уровни в проекте, и это было как раз из-за OnValidate. С тех пор обиделся и не использую его)
@@EmeraldPowder Я его за редким исключением обрамляю таким же #if UNITY_EDITOR. Просто вставлять куски едитор кода в рантайм очень мешает читабельности. Лично меня жутко раздражает. К тому же в рантайме тебе сцену не надо настраивать, а там лишние проверки на isPlaying. В любом случае именно в данных задачах, мне более приемлемым кажется OnValidate, но, может, это вкусовщина.
А ExecuteAlways я использую именно так, как называется этот атрибут. Возьмем какой-нибудь UI элемент, который должен одинаково отрабатывать, что в рантайме, что в редакторе, вот тогда да.
И, по-моему, ты ошибаешься на счет "сообщений", которые работают в редакторе. Там отрабатывает только Awake, Update и еще пару функций (точно не помню).
@@MrSvennko Да, по идее конечно OnValidate лучше тут подходит. Наверное если нет кучи префабов левелов, в каждом из которых куча скриптов с OnValidate, как у меня было, то нормально работает
Сообщения точно знаю что работают Awake,Start,Update,LateUpdate. А всякие CollisionEnter, OnEnabled и Destroyed мне кажется лучше в любом случае не использовать в едитор-коде
Можно к тебе на курсы в ученики платное естественно записаться?) Научи меня мастер
Делать скрипт, который прижимает объект к поверхности - пффф
Сделать срипт, который спаунит префаб по клику мыши и сразу прижимает к поверхности + возможность поворота вдоль нормали - секс
Можешь научить скриптингу просто я это единственное не умею в создании игр.
для тех кто не хочет учиться скриптингу специально разработаны блюпринты на анриле, а так тебя научить кодить можешь только ты сам, а помочь в этом могут обучающие видео или специальная литература.
Всегда левелы в новых сценах делал
Это кстати более правильный подход, особенно с учётом load additive, но как-то так выходит что в префабах проще и чаще встречается
Может контент про вызовы типо создание игры за 24 часа?
Самому хочется больше такого контента, но обычно на такие видосы очень много времени нужно тратить, так что получаеется не так часто. Кстати если есть идеи каких-то интересных тем-идей для таких видео, обязательно закидывайте в комменты
Брооо... У меня есть для тебя особый квест который ты на вряд ли сможешь выполнить. Закину 1000 если выполнишь... Замути систему магии рун как в Arx Fatalis на Unity
Здравствуйте можете создать игру факторио на андроид моя любимая игра
Привет. Факторию не так просто создать со всеми нюансами, а так на мобилки есть похожая Mindustry, она вроде даже сначала была на телефонах а потом и в стиме вышла
Ничего не идеально встало с поворотами. Вся эта мишура с тригонометрией очень условная. Понимаю, что хочется докзаать, что все другие кто не учил её дураки, но так не работает. Люди просто упрощают всё, чтобы не тратить время на выверение сраных формул, без которых вполне можно обойтись тут)))