Подготовка своего персонажа
Существует три главных шага по созданию “с нуля” своего анимированного гуманоидного персонажа: моделирование, риггинг и скиннинг.
Моделирование
Это процесс создания своих гуманоидных мешей в одном из инструментов 3D моделирования — 3DSMax, Maya, Blender, и т.д. Хоть это и целая тема для обсуждения сама по себе, существует несколько принципов, которые рекомендуется соблюдать, чтобы ваша модель была совместима с анимацией в Unity проекте.

- Соблюдайте разумную топологию. Понятие “разумной” структуры вашего меша довольно тонкое, но в целом вам следуем помнить о том, как вершины и треугольники модели будут искажаться при анимации. Неправильная топология приведёт к неприятным искажениям меша при движениях модели. Изучая существующие 3D меши персонажей, можно узнать много нового о том, как правильно размещать топологию и почему.
- Не забывайте про масштаб вашего меша. Попробуйте импортировать модель и сопоставить её размер с “метрическим кубом” (длина одной стороны стандартного Unity примитива “куб” равна одной условной единице, так что такой примитив можно рассматривать как однометровый куб в большинстве случаев). Проверьте единицы измерения вашего приложения для 3D моделирования и скорректируйте настройки экспорта так, чтобы размер модели был в нужных вам пропорциях к метровому кубу. Если не учитывать это при работе над моделями, легко прийти к ситуации, когда вы создадите несколько разных моделей без учёта масштаба и они окажутся несоразмерны после импорта в Unity.
- Располагайте меш так, чтобы ступня персонажа находилась в центре вращения модели. Так как обычно персонаж ходит по горизонтальной поверхности, будет намного проще с ним работать, если его центр вращения(то есть, его позиция трансформации) будет на этой поверхности.
- По возможности, моделируйте в Т-позе. Это даст дополнительное пространство для манёвра при работе над труднодоступными местами (например, подмышками). Кроме того, это упростит размещение рига внутри меша.
- Держите модель в порядке. Не оставляйте дырок в поверхности, объединяйте вершины и избавляйтесь от скрытых поверхностей, которые никогда не будут видны. Это поможет при скиннинге, особенно если скиннинг автоматизирован.
Риггинг
Это процесс создания скелета из сочленений для управления движениями вашей модели.
Программы для 3D моделирования предоставляют множество инструментов создания сочленений гуманоидного рига. От уже готовых скелетов, которые достаточно отмасштабировать под свою модель, до средств создания отдельных костей и объединения их в костную структуру. Чтобы риг работал с Mecanim, таз должен быть корневым элементом всей иерархии костей и в скелете должно быть не менее 15 костей.
Иерархия сочленение/кость должна соответствовать натуральной структуре создаваемого персонажа. Поэтому руки и ноги должны идти в парах и вам следует соответствующе их называть (напр. “arm_L” для левой руки, “arm_R” для правой и т.д.). Возможные структуры иерархии:-

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

- Используйте автоматизацию для начальной настройки скиннинга (см. соответствующие руководства для 3DMax, Maya и т.д.).
- Создавайте простые анимации или импортируйте готовые анимации для своего рига, чтобы проверить скиннинг. Это позволит вам быстро выяснить, хорошо ли выглядит ваш скиннинг во время движения.
- Постепенно редактируйте и улучшайте свою работу по скиннингу.
- Используйте не более 4 воздействий при использовании мягкой привязки, т.к. это наибольшее количество, которое может использовать Untiy. Если к части меша будет применено более четырёх воздействий, то как минимум часть информации будет потеряна при проигрывании анимации в Unity.
Модели
Файлы моделей, размещенные в папке Assets внутри проекта Unity, автоматически импортируются и сохраняются как ассеты Unity.
Файл модели может содержать 3D модель персонажа, здания или части мебели. Модель импортируется в виде набора ассетов. В окне Project(проект) главный импортированный объект представляется в виде Model Prefab(префаб модели). Обычно также существует несколько Mesh объектов, на которые ссылается Model Prefab.
Файл модели может также содержать данные анимации, которые можно использовать для анимации данной модели или других моделей. Данные анимации импортируется как один или несколько Анимационных Клипов.

Настройки импорта для мешей
Import Settings для модели будут показаны в закладке Model инспектора FBX импортера, когда модель выделена. Это влияет на меш, его нормали и импортированные материалы. Настройки применяются для каждого ассета на диске, поэтому, если вам нужен ассет с другими настройками, создайте (и соответственно переименуйте) копию файла.
Хотя изначально настроек по умолчанию может быть достаточно, будет лучше, если вы изучите список настроек, перечисленных ниже. Они могут помочь определить, что вы желаете сделать с игровым объектом.
Некоторые общие корректировки, для примера, могут быть следующими:

- Scale — это фактор масштаба используемый для компенсации разницы в единицах измерения между Unity и инструментом 3d моделирования — он меняет масштаб всего файла. Обычно, можете просто установить 1. Заметьте, что физический движок Unity смасштабирован так, что 1 единица измерения эквивалентна 1 метру. Это важно, так как если вы захотите получить корректное физическое поведение, вам следует получить корректно отмасштабированную модель в оригинальном приложении для моделирования. Если же этого нельзя сделать или у вас нет контроля над модификацией меша, масштаб модели может быть откорректирован здесь.
- Generate colliders — эта опция создаст сетку коллизии чтобы позволить вашей модели сталкиваться с другими объектами.
- Material Naming and Search — эта опция поможет автоматически настроить ваши материалы и определить местоположение текстур
| Свойство: | Функция: | |
|---|---|---|
| Меши | ||
| Scale Factor | Физическая система Unity предполагает, что 1 метр в игровом мире будет равен 1 единице в импортируемом файле. Если вы предпочитаете моделировать в другом масштабе, тогда вы можете компенсировать разницу здесь. По-умолчанию, .fbx, .max, .jas и .c4d файлы имеют масштаб 0.01, .mb, .ma, .lxo, .dxf, .blend и .dae масштаб 1.0, а .3ds файлы имеют масштаб 0.1. | |
| Mesh Compression | Увеличение этого значение уменьшит размер файла для меша, но может привести к неровностям. Лучше всего поднять значение настолько высоко, насколько это возможно без появления большой разницы с несжатой версией. Это полезно для оптимизации размера игры. | |
| Read/Write Enabled | Включает возможность записи меша в процессе исполнения, так что вы можете модифицировать данные; это создает копию в памяти. Когда эта опция выключена, это экономит память, так как Unity может выгружать копию данных меша в процессе игры. Однако, если вы масштабируете или инстанциируете меши в процессе исполнения с неравномерным масштабом, может потребоваться включение “Read/Write Enabled” в их настройках импорта. Причина этого в том, что неравномерный масштаб требует чтобы данные меша сохранялись в памяти. Обычно это определяется во время сборки, но с мешами, которые масштабируются или инстанциируются в процессе исполнения, вам нужно задавать это самостоятельно. Иначе они могут не отображаться корректно в игровых сборках. | |
| Optimize Mesh | Эта опция определяет порядок, в котором будут перечислены треугольники меша. | |
| Import Blendshapes | This option allows BlendShapes to be imported with your mesh. | |
| Generate Colliders | Если активна эта опция, ваш меш будет импортирован с автоматически присоединенной сеткой столкновений. Эта опция полезна для быстрой генерации сетки столкновений для геометрии окружения, но ее нужно избегать для объектов, которые будут перемещаться. | |
| Swap UVs | Используйте эту опцию если объект с наложенными картами освещения использует неправильные UV каналы. Ваши первичные и вторичные UV каналы будут поменяны между собой. | |
| Generate Lightmap UVs | Используйте эту опцию для создания второго UV канала, который будет использоваться для карт освещения. | |
| Нормали и касательные | ||
| Normals | Определяет должны ли, и если да, то как, вычисляться нормали. Это полезно для оптимизации размеров игры. | |
| Import | Настройка по умолчанию. Импортирует нормали из файла. | |
| Calculate | Вычисляет нормали, основываясь на Smoothing angle . Если выбран именно этот метод, Smoothing Angle становится включенным. | |
| None | Дезактивирует нормали. Используйте данную опцию если меш ни использует карты нормалей, ни подвергается динамическому освещению. | |
| Tangents | Определяет должны ли, и если да, то как, вычисляться касательные и бинормали. Это полезно для оптимизации размеров игры. | |
| Import | Касательные и бинормали импортируются из файла. Эта опция доступна только для FBX, Maya и 3dsMax файлов и только когда нормали также загружены из файла. | |
| Calculate | Настройка по умолчанию. Вычисляет касательные и бинормали. Эта опция доступна только когда нормали или импортированы, или вычислены. | |
| None | Отключает касательные и бинормали. Меш не будет иметь касательных, поэтому шейдеры, работающие с картами нормалей, не будут доступны. | |
| Smoothing Angle | Данная опция устанавливает насколько острой должна быть грань, чтобы считаться жестким ребром. Это также используется чтобы разделить касательные карты нормалей. | |
| Split Tangents | Активируйте эту опцию, если карта нормалей освещения разбита швами на вашем меше. Обычно это применимо только к персонажам. | |
| Материалы | ||
| Import Materials | Отключите эту опцию, если вы не хотите чтобы генерировались материалы. Вместо этого будет использован материал Default-Diffuse. | |
| Material Naming | Определяет как именуются материалы Unity: | |
| By Base Texture Name | Имя диффузной текстуры импортированного материала, которое будет использовано для названия материала Unity. В случае, когда диффузная текстура материала не задана, Unity будет использовать имя импортированного материала. | |
| From Model’s Material | Для названия Unity материала будет использовано имя импортированного материала. | |
| Model Name + Model’s Material | Для названия Unity материала будет использовано сочетание имени файла модели и импортированного материала. | |
| Material Search | Определяет, где Unity будет пытаться найти существующие материалы, используя имя, заданное параметром Material Naming : | |
| Local | Unity будет пытаться найти существующий материал только в “локальной” папке Materials, например, поддиректория Materials, которая расположена в той же директории, что и файл модели. | |
| Recursive-Up | Unity будет пытаться найти существующие материалы во всех поддиректориях Materials во всех родительских папках вплоть до папки Assets. | |
| Everywhere | Unity будет пытаться найти существующие материалы во всех папках Unity проекта. | |
Как сделать модельку для юнити

Комментарии
Популярные По порядку
Не удалось загрузить комментарии.
ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ
13 главных ошибок, мешающих разрабатывать игры
13 самых злых ошибок для тех, кто мечтает разрабатывать игры или уже успел столкнуться с трудностями разработки игрового проекта.
Разработка игр – это просто: 12 этапов изучения геймдева
Разработка игр на плаву, она перспективна и набирает популярность. Мы подготовили подробную инфографику о пути изучения разработки игр.
15 материалов по разработке игр
Обзор материалов по геймдеву: книги, видеокурсы и полезные ресурсы, которые пригодятся при разработке игр под любую платформу.
Как сделать зомби в Unity — добавление модели и анимации
Школа программирования для детей “Пиксель” делится бесплатными уроками по освоению Unity и языка C# (Си Шарп). В этом материале мы научимся добавлять зомби в свою игру на Unity. Мы расскажем, как можно добавить модель зомби и разные анимации: спокойного состояния, бега, атаки. С такими элементами можно сделать игру Zombie Mode на Unity или другой интересный проект с тематикой апокалипсиса.
Также мы подготовили подробный видеоурок, где можно посмотреть, что мы добавляем и как настраиваем персонажей и анимации. Найти ролик вы можете в конце этого материала.
Добавление модели и анимации в Unity
Открываем сайт Mixamo. Здесь можно скачать множество моделей и анимаций бесплатно. В разделе “Персонажи” ищем модель нашего зомби, можно выбрать любую понравившуюся. Нажимаем Download. Выбираем формат FBX for Unity, а позу оставляем как есть. Дожидаемся загрузки.
Переходим в анимации.
- Для начала скачаем анимацию спокойного состояния, она называется Idle. Выбираем понравившуюся и нажимаем Download. Настройки загрузки должны быть вот такими: fbx for Unit, 30 кадров в секунду и Skin — Without Skin.
- Далее нам нужна анимация бега. У всех анимаций с перемещением должна обязательно стоять галочка In Place. Нажимаем Download, у нас настройки сохранились, так что просто скачиваем.
- И последнее, что нам нужно, — анимация атаки. Скачиваем ее таким же образом. Теперь все нужное скачано и настало время создавать проект.

Создание проекта
Все скачанные файлы для удобства можно перенести на рабочий стол. Открываем Unity Hub. Создаем новый проект. Создаем папку, где будут храниться анимации и модель зомби. Перемещаем внутрь все файлы. Создаем здесь отдельную папку для анимаций и перемещаем туда fbx-файлы, которые ее содержат. С зажатой клавишей Ctrl выделяем анимацию, содержащуюся внутри, а затем нажимаем Ctrl+D. Теперь fbx-файлы можно удалить. На каждой анимации необходимо поставить галочку Loop Time, чтобы они бесконечно повторялись. Переходим в папку Zombie. И выбираем модель. Здесь во вкладке Materials нажимаем “Распаковать текстуры”. Создадим папку, куда будут извлечены текстуры модели. Выбираем ее и в появившимся окне нажимаем fix now. И таким же образом распакуем материалы. Перемещаем нашего зомби на сцену.

Настройка аниматора
Переходим в папку с анимациями и создаем Animation Controller под названием “Зомби”. Аниматор предназначен для настройки анимации в игре и создания логики перехода между анимациями. Заходим в него и переносим все наши анимации. Переносите анимацию Idle в первую очередь, чтобы она запускалась при старте игры.
Установим связи между анимациями. Последовательно соединяем все анимации, через правую кнопку мыши Make Transition. И так же в обратном порядке.
Теперь создадим переменные, которые будут отвечать за переключение анимаций. Переходим в Parameters. Нажимаем на плюс, выбираем Bool. Даем название Idle, потом Attack, затем Run. Чтобы создать условие перехода, нажимаем на переход. И в Conditions нажимаем на плюс. В данном случае нам нужно из анимации атаки перейти в Idle, поэтому нам нужно задать условием перехода “Idle равно true”. Если же мы выберем переход от Idle к Attack, то условием будет “Attack равно true”. То есть чтобы перейти в какую-либо анимацию, нам нужно будет переключить соответствующую переменную в состояние True, а все остальные — в False.
Также у всех переходов необходимо убрать галочку Has Exit Time, чтобы анимации смогли прерывать друг друга в любое время.

Создание скрипта для зомби в Unity
Перейдем к созданию скрипта для зомби. Создаем новый скрипт и называем его Zombie. Сделаем отдельную папку со скриптами и переместим его туда.
Так как мы хотим, чтобы зомби нас преследовал, подключим UnityEngine.AI. Объект, который будет перемещаться по уровню под управлением искусственного интеллекта, должен иметь компонент NavMeshAgent, поэтому напишем следующую строчку, чтобы при подключении скрипта, данный компонент автоматически добавлялся.
Объявляем трансформ цели, до которой зомби будет бежать, сюда мы подключим игрока. Далее объявляем дробную переменную расстояния между зомби и целью, а также NavMeshAgent самого зомби и его аниматор.
В методе старт записываем в переменные соответствующие компоненты. Далее в Update в переменную distance с помощью функции вычислим расстояние между зомби и целью. Создадим условие: если расстояние больше десяти, то зомби не будет перемещаться и искать путь до цели, а также анимация будет переключена в Idle, то есть в анимацию спокойствия. С помощью setBool происходит переключение переменных из аниматора. Idle в данном случае будет true, то есть включена, а остальные — false, то есть выключены.
Если же расстояние будет меньше или равно 10 и больше 1.5, то NavMeshAgent активируем, что заставит зомби перемещаться к игроку. Укажем, к чему именно необходимо переместиться с помощью метода, передав в качестве параметра координаты цели. А анимацию переключаем на бег.
Если же цель ближе чем 1.5, то выключаем NavMeshAgent, то есть останавливаем зомби и включаем анимацию атаки.
Перед переходом в Unity не забудьте сохранить скрипт с помощью комбинации клавиш Ctrl+S.

Настройка игровых объектов
Переносим скрипт на зомби и, как мы видим, компонент NavMeshAgent добавился автоматически. Также не забудем подключить аниматор. Добавим игрока на сцену с помощью бесплатного ассета Mini First Person Controller, который можно найти по ссылке: Mini First Person Controller | Input Management | Unity Asset Store. После импорта в проект заходим в папку и перетаскиваем объект игрока на сцену. Мы выберем минимальную версию, так как дополнительные функции сейчас не понадобятся. Переместим в удобное место и добавим тег Player. Укажем объект игрока в качестве цели в скрипте зомби. Создадим Plane, по которому игровые персонажи будут перемещаться. Удалим камеру со сцены, так как мы будем использовать ту, которая уже есть в объекте игрока. В окне Project создадим папку с материалами и в ней добавим материал для plane. Подключим материал, а затем укажем поверхность статической, так как она не должна будет реагировать на физику.

Настройка поверхности для перемещения
Откроем окно навигации. Нажимаем window, AI, Navigation. Выбираем Plane и переходим на вкладку Bake. Перемещаемся так, чтобы было хорошо видно место соприкосновения ног зомби и Plane. Немного опускаем Plane и нажимаем Bake. Нужно, чтобы голубая поверхность, которая появляется над Plane, соприкасалась с ногами зомби. Именно по этой поверхности зомби будет перемещаться. Немного опускаем Plane и нажимаем Bake. Проверяем. После настройки поверхности нужно поднять Plane обратно. Запускаем игру и проверяем.

На этом урок по созданию зомби в Unity окончен. Если вы хотите глубже разобраться в Юнити, записывайтесь к нам на онлайн-курс по разработке игр. Мы обучаем детей и подростков программированию на языке C# и созданию 2D- и 3D-игр с нуля.
Заглядывайте также на наш YouTube-канал, чтобы посмотреть новые видеоуроки по Unity. В роликах мы показываем, как создать простой хоррор, разработать кликер, настроить важные компоненты игры: добавить таймер, сделать полосу жизни, разместить спавн, настроить движение персонажа и т. д.
Скрипт для зомби:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; [RequireComponent (typeof(NavMeshAgent))] public class Zombie : MonoBehaviour < [SerializeField] Transform target; float distance; NavMeshAgent myAgent; Animator myAnim; private void Start() < myAnim = GetComponent(); myAgent = GetComponent(); > private void Update() < distance = Vector3.Distance(transform.position, target.transform.position); if (distance >10) < myAgent.enabled = false; myAnim.SetBool("Idle", true); myAnim.SetBool("Run", false); myAnim.SetBool("Attack", false); >if (distance 1.5f) < myAgent.enabled = true; myAgent.SetDestination(target.transform.position); myAnim.SetBool("Idle", false); myAnim.SetBool("Run", true); myAnim.SetBool("Attack", false); >if (distance > >