создание редактора персонажа unity

Подготовка своего персонажа

Существует три главных шага по созданию “с нуля” своего анимированного гуманоидного персонажа: моделирование, риггинг и скиннинг.

Моделирование

Риггинг

Это процесс создания скелета из сочленений для управления движениями вашей модели.

Программы для 3D моделирования предоставляют множество инструментов создания сочленений гуманоидного рига. От уже готовых скелетов, которые достаточно отмасштабировать под свою модель, до средств создания отдельных костей и объединения их в костную структуру. Чтобы риг работал с Mecanim, таз должен быть корневым элементом всей иерархии костей и в скелете должно быть не менее 15 костей.

Иерархия сочленение/кость должна соответствовать натуральной структуре создаваемого персонажа. Поэтому руки и ноги должны идти в парах и вам следует соответствующе их называть (напр. “arm_L” для левой руки, “arm_R” для правой и т.д.). Возможные структуры иерархии:-

Скиннинг

Это процесс привязки меша к скелету.

Скиннинг включает в себя связывание вершин в вашем меше с костями скелета. Вершина может быть связана с костью напрямую (жёсткая привязка) или с несколькими костями, используя на них смешанные воздействия (мягкая привязка). В разных программах используются разные способы, например, привязывание отдельных вершин и вписывание в меш степени воздействия на каждую кость. Изначальная настройка обычно автоматизирована, к примеру, с помощью поиска ближайшего воздействия, или с помощью “heatmap”. Обычно скиннинг требует изрядного количества работы и тестирования с помощью анимаций, чтобы достичь желаемых результатов деформации скина. Вот несколько основных рекомендаций для этого процесса:

Источник

Создание редактора сценариев в Unity

К созданию кастомных инструментов рано или поздно приходят все, кто работает с Unity. Можно долго сопротивляться и бояться, но в какой-то момент без редакторов и инспекторов, заточенных под нужды команды, продвигаться будет невозможно.

Я участвую в проекте одного очень талантливого художника, где помогаю в разработке игры-квеста в ретро пиксель-арт стиле. Мы используем Unity, так как оба имеем длительный опыт разработки в этой среде. Практически сразу возникла необходимость создания поставленных событий, кат-сцен и головоломок, во время которых череда действий строго определена. Сначала я попытался отделаться как можно меньшей кровью и предложил использовать стандартный Animator Controller и класс StateMachineBehaviour из Unity 5 для кастомизации событий, но как оказалось этот подход не работает: конечный автомат аниматора хоть и универсален, но потребовал бы чрезмерного количества лишних действий для абсолютно линейных вещей, а нам было необходимо похожее визуальное решение, но позволяющее легко и просто выстраивать события как в таймлайне видео-редакторов.

46dc283959a242bb91dfeb709431221b
Картинка из документации Unity, вдохновившая на создание собственного редактора

Таким образом написание своего собственного полноценного редактора оказалось неминуемым.

До этого момента я писал только свои инспекторы для классов MonoBehaviour. На мой взгляд подход, используемый Unity для интерфейсов редактора несколько громоздкий, поэтому я очень боялся того, что может выйти при написании целого окна с таймлайном. В итоге что получилось: да, громоздко, но нет, ничего страшного, глаза и сознание привыкают.

Итак, задача сразу легко разбивается на две: основа системы сценариев и сам интерфейс.

Система сценариев

Логика работы простая: для каждого сценария должен определяться список событий, которые будут стартовать и заканчиваться в строго определенное время. Если мы определим эти действия, каким образом их хранить? Встроенный класс Unity MonoBehaviour автоматически сериализует поддерживаемые поля, но для того чтобы он работал, скрипт должен быть назначен активному объекту в сцене. Это подходит для класса сценария, но не подходит для наших действий — на каждую абстрактную сущность пришлось бы создать по реальному объекту в иерархии. Для нашей цели в Unity существует класс ScriptableObject, жизненный цикл которого похож на MonoBehaviour но с некоторыми ограничениями, а главное при этом не требует объекта в сцене для существования и выполнения кода.

Все что делает класс сценариев — это запускает корутину, которая на каждом кадре проверяет сколько времени прошло и кого сейчас надо запустить, обновить или остановить. Здесь приведу основной метод (ссылка на полные исходники в конце):

Для EventAction я определил три значимых события: «Начало жизни», «Момент между» (вызывается каждый кадр) и «Конец». В зависимости от самого действия может понадобится то или иное, например «соориентировать камеру в самом начале», «обновить положение, пока действие происходит», «вернуть управление игроку в конце». Для создания собственного действия достаточно в классе-наследнике переопределить соответствующие методы.

С простым покончено, теперь самое интересное.

Интерфейс редактора сценариев

Старая система интерфейсов Unity продолжает своё существование для gui редактора (кастомных инспекторов и окон) и работает следующим образом: при возникновении определенных событий (клик мышью, обновление данных, явный вызов Repaint()) вызывает специальный метод пользовательского класса, который в свою очередь делает вызовы, рисующие элементы интерфейса. Стандартные элементы могут быть автоматически расположены в окне, все они находятся в классах GUILayout и EditorGUILayout, я использовал их для простых свойств сценария и визуальной настройки:
image loader
Базовые параметры

Для создания собственного окна редактора необходимо наследоваться от EditorWindow и определить метод OnGUI():

Но в базовой библиотеке элементов нет необходимого мне, а именно перетаскиваемых боксов, которые могут существовать на нескольких дорожках и менять свой размер (есть GUI.Window, но это не совсем то). Поэтому пришлось делать вручную, а именно: самостоятельно рисовать прямоугольники, соответствующие действиям, например:

Читайте также:  книга навыка поддержка с воздуха soul knight

Этот код нарисует такой бокс:
image loader
Событие перемещения объекта

Unity позволяет определить нажатую кнопку (Event.current.type == EventType.MouseDown && Event.current.button == 0), узнать, попадает ли курсор в прямоугольник (Rect.Contains(Event.current.mousePosition)) или даже запретить обработку нажатия кнопки в этом кадре дальше по коду (Event.current.Use()). С помощью этих стандартных средств я реализовал взаимодействие: события можно перетаскивать, выделять сразу несколько, менять их длину. Когда пользователь кликает или двигает бокс, то на самом деле меняются параметры соответствующего действия, а интерфейс перерисовывается в след за ними. По правому клику действие можно добавить или удалить, а при двойном клике открывается окно редактирования:
image loader
Откуда берется интерфейс для каждого действия? В EventAction я добавил еще два виртуальных метода, относящиеся только к редактору: OnEditorGui() и OnDrawTimelineGui() — они позволяют определить интерфейс при редактировании действия и даже для отображения в таймлайне редактора.

Для проекта я уже написал несколько собственных действий, которые применимы исключительно к нему: действие, отображающее диалоги персонажей, действие задающее цель для главного персонажа или запускающее его специальную анимацию, или вот например EventAction, позволяющее управлять поведением камеры: следовать за игроком, центрироваться на объекте, отключить центрирование.

Что в итоге вышло?
image loader

Известные проблемы

Scenario и EventAction — независимые сущности, поэтому если мы дублируем сценарий и компируем его сериализованные свойства, то в новый сценарий попадут ссылки на уже существующие действия. Я планирую исправить эту ситуацию хранением связей сценарий-действие, но пока думаю над этим.

Заключение

Я считаю, что основная цель была достигнута. У проекта все еще впереди, предстоит полировка и фикс багов, но уже на данном этапе он успешно выполняет свою функцию. Прежде чем приступить к нему, я долго прочесывал интернет в надежде найти что-то готовое, но не смог. Теперь я выкладываю его для всех и надеюсь, что эта работа может оказаться полезной кому-то кроме нас.

Источник

Первые шаги в Unity

image loader

Привет, Хабр. Материал подготовлен для тех, кто только начинает осваивать unity.

Unity — это один из самых популярных движков на данный момент. Составить ему конкуренцию может разве что Unreal Engine 4, но что у первого, что и у второго есть свои плюсы и свои минусы. Unity поддерживает почти 30 платформ, в их числе мобильные, виртуальная реальность, настольные компьютеры, консоли и так далее. Unity — это не просто хороший вариант для старта, это идеальный вариант для старта! Тут заложено использование гибкой модульной системы при создании сцен и персонажей в игре. Даже новичок способен создать крутой проект, используя готовые спрайты и конструктор движка.

Если же считаете, что готовы погрузиться с головой в «кирпичную систему» для продвинутых, то тут есть возможность настройки практически любого компонента. К примеру, разработка своего собственного шейдера или же переписать сетевой стек для потребностей своей игры.

Так с чего же начать работу на Unity и реализацию своего проекта?

Первым шагом будет установка ПО. На официальном сайте есть четыре разных версии программы для установки. Какую же выбрать? Всё по порядку. Версии представляют собой одинаковые функции движка.

Если вам интересно, вот что означают эти три варианта:

Unity Personal: эта версия бесплатна. Однако ваша компания должна зарабатывать менее 100 000 долларов за финансовый год. Еще одна загвоздка в том, что в каждой игре будет отображаться заставка «Сделано Unity», которую нельзя удалить.

Unity Plus: эта версия стоит 35 долларов в месяц. Он поставляется с инструментами отчетности о производительности, оболочкой Unity Pro и некоторыми дополнительными функциями. Эта версия требует, чтобы ваша компания зарабатывала менее 200 000 долларов в год, и она позволяет отключать или настраивать заставку «Сделано Unity».

Unity Pro: это самый высокий доступный уровень. Он стоит 125 долларов в месяц и поставляется с полезными сервисами Unity, профессиональными надстройками для iOS и Android и не имеет заставки. Ограничения по доходу тоже нет.

image loader

Также можно присмотреться к версии Enterprise, где стоимость подписки определяют пользовательские потребности.

Самые явные различия представленных версий — это то, что в Enterprise игры должны начинаться с заставки Unity. А в платных версиях можно удалить или загрузить другую заставку.

Плюс есть довольно интересные сервисы в Unity, к примеру, Cloud Build и Analytics. Естественно, они существуют только в платных версиях.

Для начала работы будет достаточно персональной версии, поэтому нажимаем кнопку «начать». Это приведёт к странице загрузки, нажимаем «принять условия и загрузить». Начнётся загрузка.

image loader

Первым установится Unity Hub

Unity Hub — это автономное приложение, которое упрощает процесс поиска, загрузки и управления вашими проектами и установками Unity.

Если вы запустите редактор Unity без установленного концентратора, Unity предложит вам установить его. Если у вас есть лицензия от предыдущей версии Unity, вы можете создать пустой проект из приглашения установки Hub. Если впоследствии вы попытаетесь создать или открыть проект из редактора Unity, Unity предложит установить Hub.

Создание проекта

Чтобы создать новый проект (и указать, в какой версии редактора его открыть), выполните одно из следующих действий:

Щелкните кнопку New. В строке заголовка диалогового окна «Новый проект» отображается версия редактора, которую должен использовать проект.

Щелкните стрелку раскрывающегося списка рядом с кнопкой «Создать», чтобы выбрать версию редактора, которую вы хотите использовать. Примечание: это раскрывающееся меню доступно только в том случае, если вы установили несколько версий редактора в хабе.

image loader

Вкладка «Проекты»

image loader

Чтобы просмотреть проекты, которыми управляет хаб, щелкните значок Проекты

Изучение интерфейса

Когда ваш проект загрузится, появится экран, заполненный информацией.

Ваш макет, вероятно, будет выглядеть так:

image loader

Если нет, нажмите кнопку «Макет» в правом верхнем углу и выберите 2 на 3 в раскрывающемся меню.

Читайте также:  некрасова кому на руси жить хорошо сколько страниц в книге

image loader

Каждый макет состоит из нескольких различных представлений. Вид просто панель информации, которую вы используете для управления. Например, есть представление для размещения объектов в вашем мире.

Вот как выглядит интерфейс, разбитый на отдельные представления:

image loader

Чтобы просмотреть список всех представлений, щелкните параметр «Окно» в строке меню.

image loader

Пользовательский интерфейс Unity полностью настраивается, поэтому вы можете добавлять, удалять и переупорядочивать представления по своему усмотрению.

При работе с Unity вы, как правило, захотите преобразовать представления в макет, который идеально подходит для данной задачи. Unity позволяет сохранять макеты для использования в будущем.

image loader

Представление Profiler позволяет анализировать вашу игру во время ее работы. К сожалению, профилировщик также блокирует просмотр игры, поэтому вы не сможете играть в игру, пока вы ее профилируете — не очень полезно.

Нажмите и удерживайте на вкладку Профили и перетащите его на вкладке Сцена выше.

image loader

Как видите, виды можно перемещать, закреплять и упорядочивать. Они также могут существовать вне редактора в виде плавающих окон.

Чтобы сохранить макет, выберите «Окно \ Макеты \ Сохранить макет…» и назовите его «Отладка».

image loader

Всякий раз, когда вам нужно получить доступ к этому конкретному макету, вы можете нажать кнопку «Макет» и выбрать «Отладка».

image loader

При нажатии вы увидите список всех ваших макетов.

image loader

Вы также можете удалить макеты. Если вы случайно выбросите стандартный макет в корзину, вы можете восстановить макеты по умолчанию.

Организация активов

Новички в Unity могут представить, что вы разрабатываете свою игру от начала до конца в Unity, включая написание кода, создание 3D-моделей и текстур и т. д.

На самом деле, лучше думать о Unity как об инструменте интеграции. Обычно вы пишете код или создаете 3D-модели или текстуры в отдельной программе и используете Unity, чтобы связать все вместе.

В своей игре у вас будет много ресурсов, поэтому очень важно организовать их таким образом, чтобы их было легко найти.

Представление, в котором вы импортируете и упорядочиваете активы, называется обозревателем проекта. Он имитирует организацию вашей файловой системы.

image loader

В предыдущих версиях Unity в каждом обозревателе проектов по умолчанию ничего не было. Вы можете думать о сцене как об уровне в вашей игре. Вы можете разделить все уровни на отдельные сцены или сохранить все в одной сцене. Выбор остается за вами.

В Диспетчере проектов выберите папку Assets и нажмите кнопку Create. В раскрывающемся меню выберите «Папка» и назовите ее «Модели». Это будет дом для всех ваших моделей. У вас может возникнуть соблазн создать папки и манипулировать файлами в файловой системе вместо обозревателя проекта. Не делайте этого!

Unity создает метаданные для каждого актива. Создание, изменение или удаление ресурсов в файловой системе может нарушить эти метаданные и вашу игру.

Создайте следующие папки: Animations, Materials, Prefabs, Presets, Scripts и Textures.

Ваш обозреватель проекта должен выглядеть так:

image loader

Лично я считаю, что большие значки папок отвлекают. Если у вас также есть предпочтение, вы можете увеличить или уменьшить размер с помощью ползунка в нижней части Диспетчера проектов.

image loader

Примечание. Все снимки экрана в этом руководстве с этого момента будут отображать самые маленькие настройки.

Наконец, вы можете изменить название актива. Например, ваша текущая сцена называется SampleScene. Выберите папку Scenes, а затем выберите файл SampleScene. Имя будет выделено. Один раз щелкните по нему еще раз, и вы напишете новое имя. Измените его на Main.

image loader

Вы можете сделать это с любой папкой или активом в Диспетчере проектов.

Если вам интересно узнать подробнее о формате обучения и программе, познакомиться с преподавателем курса — приглашаем на день открытых дверей онлайн. Регистрация здесь.

Источник

Как выполнить настройку анимированной модели персонажа в Unity3D?

Транспорт

Unity имеет встроенные транспортные средства для управления автомобилем и самолетом. Добавь следующие ассеты:

В окне Проект зайди в папку Standard Assets → Vehicles → Car → Prefabs. Добавь prefab Car на сцену. Удали лишнюю камеру со сцены (Main Camera), если она есть. В окне Проект зайди в папку Standard Assets → Cameras → Prefab. Добавь prefab камеры MultipurposeCameraRig на сцену.

78865deec96e8efc340aebc1298bde9dК поездке готов👍

А еще в Unity есть ✈самолет, мы уверены, что ты сам сможешь с ним разобраться.

Использование персонажа

Создание структуры костей

Выберите нижнюю сферу бедренной кости и последовательно нажмите G, Z, 0.5 и Enter, чтобы переместить ее туда, где должен находиться пупок человечка.

496df50f0dd27fed88b1881bbd2361bd

Теперь выберите верхнюю сферу и нажмите G, Z, 0.1 и Enter, чтобы немного поднять ее.

74c942f69e1e7f39fc93803b7e841e94

Примечание: если вам плохо видно, что вы делаете, вы можете увеличивать и уменьшать масштаб с помощью колеса мышки.

Чтобы получить сразу несколько костей позвоночника, вам нужно разделить кость бедра на три части. Для этого выберите бедренную кость, нажмите W, чтобы открыть меню «Specials», и выберите пункт «Subdivide». По умолчанию, эта опция разделяет кость на две части, поэтому вам необходимо изменить значение Number of Cuts в нижней части панели инструментов слева на 2.

377ff7911a30e34b962d52dafa17120b

Примечание: если вы не видите ползунок «Number of Cuts», поместите курсор мыши под текст в левом нижнем углу, который читается как «Subdivide Multi», и прокрутите его вверх, чтобы сделать видимым.

После разделения позвоночника новые кости получили названия Hips.001 и Hips.002. Это не самый удобный способ для их обозначения, поэтому лучше их переименовать, используя правую панель Bone. Назовите верхнюю кость Chest, а среднюю – LowerSpine.

1db7ce85a8dea11ef74a1dcbb7d02e0d

Отзеркаливание

Начиная с версии Blender 2.79, в программу была добавлена новая функция, позволяющая быстро отзеркаливать кости стержня всего за несколько простых шагов. Раньше разработчикам приходилось вручную создавать дубликаты, а также самостоятельно корректировать имена и назначать роль всех костей. Это действительно очень трудоемкий и долгий процесс.

Читайте также:  араз искендер оглы агаларов фото биография

Для начала отмените выбор всех костей, нажав кнопку А, пока не исчезнут оранжевые контуры выделения. Теперь вам нужно выбрать только кости слева (обратите внимание – слева от персонажа, то есть справа от вас). Сделайте это удерживая клавишу Shift и щелкая правой кнопкой мыши по каждому объекту.

bd9825602cc732c52e993ac1e0538a1b

Закончив выделение, нажмите W и выберите пункт Symmetrize.

057d21cb037306dac47773c1d6e09727

Это все, что вам нужно сделать, чтобы получить идеальную зеркальную копию выбранных костей:

3f0b19f6d15428838ff854cd8ac6f450

Анимации

Системе анимации Mecanim в Unity можно было бы посвятить целую книгу (и такая книга уже написана, кстати). Анимации в 3D, как правило, сложнее, чем в 2D. В 2D файл анимации обычно изменяет спрайт для рендеринга в каждом ключевом кадре. В 3D данные, связанные с анимацией, гораздо сложнее. Вспомните: в предыдущей статье я говорил, что файлы анимации содержат ключевые кадры. В 3D может быть много ключевых кадров, каждый из которых содержит массу точек данных для движений пальцев, руки или ноги или для выполнения любого количества и типа перемещений. Кроме того, меши могут определять кости в них и использовать компоненты, называемые рендерами мешей со скинами (skinned mesh renderers), которые деформируют меши на основе того, как движутся кости; это во многом напоминает то, как движутся живые существа.

Файлы анимации обычно создаются в сторонней системе моделирования/анимации, хотя их можно создавать и в Unity.

Базовая поза персонажа в системе 3D-анимации — в виде буквы «T» (T-pose), и понимать это следует буквально: персонаж стоит вертикально с вытянутыми в стороны руками. Такой вариант применяется практически ко всем моделям, имеющим гуманоидную форму. Затем вы можете вдохнуть жизнь в этот базовый персонаж, назначив ему с помощью Mecanim практически любой файл анимации. Можно сделать так, чтобы зомби, эльф и человек танцевали совершенно одинаково. Также можно смешивать и подбирать файлы анимации любым подходящим для вас способом и назначать их через состояния во многом по аналогии с тем, что вы делали в 2D. Для этого применяется контроллер анимации, подобный показанному на рис. 4.

9173907e9c891f8612b8c2fbfe30c1baРис. 4. Контроллер анимации для управления состояниями анимации персонажа

Помните, что персонажи и анимации можно получать из Unity Asset Store, создавать с помощью средств моделирования и использовать сторонние продукты вроде Fuse от Mixamo, которые позволяют быстро генерировать адаптированные под ваши потребности персонажи. Просмотрите мои видеоролики на Channel 9 — они дадут вам начальное представление об анимации в Unity.

Я пока не знаю, как решить или улучшить

Создание объектов

Когда вам нужно создать в период выполнения новые элементы на основе GameObject, не пользуйтесь конструкторами. Вместо них применяйте Instantiate. У вас определенно могут быть классы с конструкторами, которые в скриптах неявно наследуются от MonoBehavior; это происходит во всех скриптах верхнего уровня, назначенных любому GameObject. Однако эти скрипты могут вызывать конструкторы для других объектов:

Добавление аксессуаров

Редактирование персонажа

Прикрепление объектов

Подготовка

Накидаем простенькую сцену с платформами и шипами. Я использовал редактор Тайлов, но это могут быть и обычные спрайты с колайдерами на них. Добавляем в иерархию GameObject игрока.

c7cb1164c489e82cbd939fe05f71ddb3

В инспекторе добавляем к объекту компонент Flow Machine.

5bfacab90eeb2b0879f75e1267345b59

Нажимаем Edit Graph и приступает к настройке графа.

Учим камеру двигаться

Есть два основных способа научить камеру двигаться за персонажем.

1. Подвинуть камеру внутри сцены, чтобы она была на персонаже, а затем в привязать камеру к объекту персонажа через меню иерархии.

2. Задать движение камеры за персонажем програмно.

Создаём скрипт CameraBehaviour, и привязываем его к объекту Main Camera (добавляем через инспектор).

Открываем наш новый скрипт, и начинаем кодить (да, мне на работе не хватает, продолжаю и после).

Фиксируем объект камеры на замок в инспекторе, и перетаскиваем наш объект Player в GameObject.

Теперь камера двигается за игроком.

Однако камера постоянно вылезает за пределы уровня, показывая синий фон.

Придание силы объекту для прыжка

Если запустить, то по нажатию на Space персонаж будет прыгать. Но есть одна проблема…

7888f9b06f5b5d76c6e6f592a034317b

Во-первых, нету анимации прыжка. Во-вторых, если, находясь в воздухе, снова нажать Space, то персонаж прыгнет ещё раз. А нам бы этого не хотелось.

Создадим новый слой и назначим его платформам.

a1ec52533ad16c42a1542f6c4a1ef516

Необходимо дописать логику по проверке, находится ли персонаж на земле. Один из способов — рейкасты. Будем выпускать лучи вниз на небольшое расстояние, чтобы проверить, сталкиваются ли они с платформой. Проверять как раз по этому слою будем.

Переиспользование логики

Так как эта проверку нужна в двух местах, то выделим всю логику в отдельный юнит Assets > Create > Bolt > Flow Macro.

Теперь в графе персонажа нужно немного изменить узлы, обрабатывающие прыжок.

Если запустить, то увидим, что персонаж теперь может прыгать только находясь на платформе.

45fb3e7cae26eaaa8ff149b44b54b7cc

Точно также добавим проверку к анимации.

ef01bb333c2281c0dffabb142dec4093

Теперь, если персонаж в воздухе, будет проигрываться соответствующая анимация.

83994b38f861b9e24a302c2649c8fdf6

Хотелось бы как-то визуализировать дебажную информацию для отладки.

Скиннинг

Это процесс привязки меша к скелету.

Скиннинг включает в себя связывание вершин в вашем меше с костями скелета. Вершина может быть связана с костью напрямую (жёсткая привязка) или с несколькими костями, используя на них смешанные воздействия (мягкая привязка). В разных программах используются разные способы, например, привязывание отдельных вершин и вписывание в меш степени воздействия на каждую кость. Изначальная настройка обычно автоматизирована, к примеру, с помощью поиска ближайшего воздействия, или с помощью “heatmap”. Обычно скиннинг требует изрядного количества работы и тестирования с помощью анимаций, чтобы достичь желаемых результатов деформации скина. Вот несколько основных рекомендаций для этого процесса:

Источник

Поделиться с друзьями
Моря и океаны
Adblock
detector