GUI Skin (IMGUI System)
GUISkins are a collection of GUIStyles that can be applied to your GUI. Each Control type has its own Style definition. Skins are intended to allow you to apply style to an entire UI (User Interface) Allows a user to interact with your application. Unity currently supports three UI systems. More info
See in Glossary , instead of a single Control by itself.
A GUI Skin as seen in the Inspector
To create a GUISkin, select Assets->Create->GUI Skin from the menubar.
Please Note: This page refers to part of the IMGUI system, which is a scripting-only UI system. Unity has a full GameObject-based UI system which you may prefer to use. It allows you to design and edit user interface elements as visible objects in the scene A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary view. See the UI System Manual for more information.
Properties
All of the properties within a GUI Skin are an individual GUIStyle. Please read the GUIStyle page for more information about how to use Styles.
| Property: | Function: |
|---|---|
| Font | The global Font to use for every Control in the GUI |
| Box | The Style to use for all Boxes |
| Button | The Style to use for all Buttons |
| Toggle A checkbox that allows the user to switch an option on or off. More info See in Glossary |
The Style to use for all Toggles |
| Label | The Style to use for all Labels |
| Text Field | The Style to use for all Text Fields |
| Text Area | The Style to use for all Text Areas |
| Window | The Style to use for all Windows |
| Horizontal Slider | The Style to use for all Horizontal Slider bars |
| Horizontal Slider Thumb | The Style to use for all Horizontal Slider Thumb Buttons |
| Vertical Slider | The Style to use for all Vertical Slider bars |
| Vertical Slider Thumb | The Style to use for all Vertical Slider Thumb Buttons |
| Horizontal Scrollbar | The Style to use for all Horizontal Scrollbars |
| Horizontal Scrollbar Thumb | The Style to use for all Horizontal Scrollbar Thumb Buttons |
| Horizontal Scrollbar Left Button | The Style to use for all Horizontal Scrollbar scroll Left Buttons |
| Horizontal Scrollbar Right Button | The Style to use for all Horizontal Scrollbar scroll Right Buttons |
| Vertical Scrollbar | The Style to use for all Vertical Scrollbars |
| Vertical Scrollbar Thumb | The Style to use for all Vertical Scrollbar Thumb Buttons |
| Vertical Scrollbar Up Button | The Style to use for all Vertical Scrollbar scroll Up Buttons |
| Vertical Scrollbar Down Button | The Style to use for all Vertical Scrollbar scroll Down Buttons |
| Custom 1–20 | Additional custom Styles that can be applied to any Control |
| Custom Styles | An array of additional custom Styles that can be applied to any Control |
| Settings | Additional Settings for the entire GUI |
| Double Click Selects Word | If enabled, double-clicking a word will select it |
| Triple Click Selects Line | If enabled, triple-clicking a word will select the entire line |
| Cursor Color | Color of the keyboard cursor |
| Cursor Flash Speed | The speed at which the text cursor will flash when editing any Text Control |
| Selection Color | Color of the selected area of Text |
Details
When you are creating an entire GUI for your game, you will likely need to do a lot of customization for every different Control type. In many different game genres, like real-time strategy or role-playing, there is a need for practically every single Control type.
Because each individual Control uses a particular Style, it does not make sense to create a dozen-plus individual Styles and assign them all manually. GUI Skins take care of this problem for you. By creating a GUI Skin, you have a pre-defined collection of Styles for every individual Control. You then apply the Skin with a single line of code, which eliminates the need to manually specify the Style of each individual Control.
Creating GUISkins
GUISkins are asset files. To create a GUI Skin, select Assets->Create->GUI Skin from the menubar. This will put a new GUISkin in your Project View.
A new GUISkin file in the Project View
Editing GUISkins
After you have created a GUISkin, you can edit all of the Styles it contains in the Inspector A Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values. More info
See in Glossary . For example, the Text Field Style will be applied to all Text Field Controls.
Editing the Text Field Style in a GUISkin
No matter how many Text Fields you create in your script, they will all use this Style. Of course, you have control over changing the styles of one Text Field over the other if you wish. We’ll discuss how that is done next.
Applying GUISkins
To apply a GUISkin to your GUI, you must use a simple script to read and apply the Skin to your Controls.
In some cases you want to have two of the same Control with different Styles. For this, it does not make sense to create a new Skin and re-assign it. Instead, you use one of the Custom Styles in the skin. Provide a Name for the custom Style, and you can use that name as the last argument of the individual Control.
For more information about working with GUIStyles, please read the GUIStyle page. For more information about using UnityGUI, please read the GUI Scripting Guide.
Скин GUI (система IMGUI)
скины GUISkins – это набор стилей GUIStyles, которые можно применить к вашему графическому интерфейсу. Каждый тип Control имеет собственное определение стиля. Скины предназначены для того, чтобы вы могли применить стиль ко всему UI (пользовательский интерфейс) Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. в Словарь , а не в отдельном элементе управления.
Скин графического интерфейса, как видно в инспекторе
Чтобы создать GUISkin, выберите Активы->Создать->GUI Skin в строке меню.
Обратите внимание: эта страница относится к части системы IMGUI, которая только для сценариев Система пользовательского интерфейса. Unity имеет полную систему пользовательского интерфейса на основе GameObject, которую вы можете использовать. Он позволяет создавать и редактировать элементы пользовательского интерфейса как видимые объекты в сцене Сцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в представлении Словарь . Дополнительные сведения см. в Руководстве по системе пользовательского интерфейса.
Свойства
Все свойства в обложке GUI представляют собой отдельный стиль GUIStyle. Пожалуйста, прочтите страницу GUIStyle для получения дополнительной информации об использовании стилей.
| Свойства: | Функции: |
|---|---|
| Font | Глобальный шрифт, используемый для каждого элемента управления в графическом интерфейсе. |
| Box | Стиль, используемый для всех блоков. |
| Button | Стиль, используемый для всех кнопок. |
| Toggle Флажок, который позволяет пользователю включать или выключать параметр. More info See in Словарь |
Стиль, используемый для всех переключателей. |
| Label | Стиль, используемый для всех ярлыков. |
| Text Field | Стиль для использования во всех текстовых полях. |
| Text Area | Стиль для использования во всех текстовых областях. |
| Window | Стиль для использования во всех Windows. |
| Horizontal Slider | TСтиль, используемый для всех горизонтальных ползунков. |
| Horizontal Slider Thumb | Стиль, используемый для всех кнопок горизонтального ползунка. |
| Vertical Slider | Стиль, используемый для всех вертикальных ползунков. |
| Vertical Slider Thumb | Стиль, используемый для всех кнопок вертикального ползунка. |
| Horizontal Scrollbar | Стиль, используемый для всех горизонтальных полос прокрутки. |
| Horizontal Scrollbar Thumb | Стиль, используемый для всех кнопок большого пальца на горизонтальной полосе прокрутки. |
| Horizontal Scrollbar Left Button | Стиль, используемый для всех кнопок прокрутки влево на горизонтальной полосе прокрутки. |
| Horizontal Scrollbar Right Button | Стиль, используемый для всех кнопок прокрутки вправо на горизонтальной полосе прокрутки. |
| Vertical Scrollbar | Стиль, используемый для всех вертикальных полос прокрутки. |
| Vertical Scrollbar Thumb | Стиль, используемый для всех кнопок вертикальной полосы прокрутки. |
| Vertical Scrollbar Up Button | Стиль, используемый для всех кнопок прокрутки вверх на вертикальной полосе прокрутки. |
| Vertical Scrollbar Down Button | Стиль, используемый для всех кнопок вертикальной полосы прокрутки прокрутки вниз. |
| Custom 1–20 | Дополнительные пользовательские стили, которые можно применить к любому элементу управления |
| Custom Styles | Массив дополнительных пользовательских стилей, которые можно применить к любому элементу управления. |
| Settings | Дополнительные настройки для всего графического интерфейса |
| Double Click Selects Word | Если включено, двойной щелчок по слову выделит его |
| Triple Click Selects Line | Если включено, тройной щелчок по слову выделит всю строку |
| Cursor Color | Цвет курсора клавиатуры |
| Cursor Flash Speed | Скорость, с которой текстовый курсор будет мигать при редактировании любого элемента управления текстом. |
| Selection Color | Цвет выделенной области текста |
Подробнее
Когда вы создаете полностью графический интерфейс для своей игры, вам, скорее всего, потребуется выполнить множество настроек для каждого типа управления. Во многих игровых жанрах, таких как стратегии в реальном времени или ролевые игры, требуется практически каждый тип управления.
Поскольку каждый отдельный элемент управления использует определенный стиль, нет смысла создавать более дюжины отдельных стилей и назначать их всем вручную. Скины GUI позаботятся об этой проблеме за вас. Создавая скин GUI, вы получаете предварительно определенную коллекцию стилей для каждого отдельного элемента управления. Затем вы применяете скин с помощью одной строки кода, что устраняет необходимость вручную указывать стиль каждого отдельного элемента управления.
Создание GUISkins
Обложки GUISkins — это файлы активов. Чтобы создать скин GUI, выберите Ресурсы->Создать->Скин GUI в строке меню. Это добавит новую оболочку GUISkin в ваш представление проекта.
Новый файл GUISkin в представлении проекта
Редактирование GUISkins
После того как вы создали GUISkin, вы можете редактировать все стили, содержащиеся в Инспектор Окно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и редактировать значения. Подробнее
См. в Словарь . Например, текстовое поле стиль будет применяться ко всем элементам управления текстовым полем.
Редактирование стиля текстового поля в GUISkin
Независимо от того, сколько текстовых полей вы создадите в своем скрипте, все они будут использовать этот стиль. Конечно, вы можете изменить стили одного текстового поля по сравнению с другим, если хотите. Далее мы обсудим, как это сделать.
Применение GUISkins
Чтобы применить GUISkin к своему графическому интерфейсу, вы должны использовать простой скрипт для чтения и применения скина к вашим элементам управления.
В некоторых случаях вам может понадобиться два одинаковых элемента управления с разными стилями. Для этого нет смысла создавать новый Скин и переназначать его. Вместо этого вы используете один из Пользовательских стилей в обложке. Укажите Имя для пользовательского стиля, и вы можете использовать это имя в качестве последнего аргумента отдельного элемента управления.
Дополнительную информацию о работе с GUIStyles см. на странице GUIStyle. Дополнительную информацию об использовании UnityGUI см. в Руководстве по созданию сценариев в графическом интерфейсе.
3D Character Customization in Unity
Note: I’m aware of the problem with the models. I’m working in a new version of the tutorial, with fixed models, as well in the new asset for customization with this method and another one more flexible. I hope I can publish the update and the new asset soon.
- Source project can be downloaded here:https://www.dropbox.com/s/gl7appsvxav2ofw/3d_char_customizer.unitypackage?dl=0. Note that this was made with an old version of Unit (5.x), so, it can have errors.
- Advanced version of this project can be found at:https://github.com/keawstudio/Clothing-System-3D
- Videos can be found at my youtube channel:https://www.youtube.com/channel/UCn2P6tlajFWFdW2TWZ8cEbA
I will not explain everything here, I’ll only show how you can achieve the results show in the video presentation. So, don’t expect a step-by-step tutorial. The source code have a lot of comments, so it can be easy to follow it.
The character customization works with two type of objects:
* rigid objects that aren’t deformed by bones, like helmets, weapons, rings
* clothes that need to be deformed by bones, to follow the movements of the character
These two types of objects have different forms of use.
The rigid objects are instantiated and assigned as a child of a bone. It can be used for clothes too? Well, yes, but doesn’t work very well. For clothes we use a nice component that Unity has: SkinnedMeshRenderer.
As the documentation says, Unity uses the Skinned to render bones animations, that perform deformations in the mesh of the object. So, when you import a model that have a skeleton system (called armature), Unity create a skinned mesh for the object, to interact with the bones. The bones are invisible, but you can access then in the editor (or in a script in runtime).
Let’s take a look at our model, the chibi, to understand how the Skinned Mesh works.
As you can see, the object have the mesh (in this case, various meshes, it will be explained later) and the bones armature (named metarig). If you expand the metarig object, you can see the bones hierarchy of the chibi.
When selecting one of the meshes, we have access to its Skinned Mesh Renderer and Materials assigned to it. So, every mesh that have influence of a bone will have its own Skinned Mesh Renderer.
The Skinned Mesh Renderer have various properties, but the one that make our “magic†happens is the property Mesh. This one tells what mesh it uses. You can change it to another mesh of another object.
How exactly it works? When a bone is assigned to a mesh, every vertex of this mesh store information on how the bone will deform it. Because that you can chance the mesh to another one. But the other mesh need to have the appropriate weight map for the bone.
What my system does is take the mesh of another object, an armor for example, and assign it to the part of the body I want to change. Once the char’s body and the armor was made with the same armature, they share the same bones information in their weight mappings, and with this information the Skinned Mesh Renderer will know how to render the mesh.
The chibi model consist on its body, divided into sections (head, arms, legs, and so on), its armature, and objects that represents each cloth type available, like upper (for shirts), lower (for pants), shoes and gloves. These cloth parts are the ones that will receive the meshes to make the clothes the char is wearing.
For example, I want to put a Christmas jumper in the chibi, so I get the jumper object mesh and assign it to the mesh of the upper cloth object. Then I apply the material and, voilá, the chibi is wearing now a nice red jumper. No need to remove an existing object and instantiating a new one in the place. Only changing the mesh and the texture. Easy, no?
Why I divided the body in various parts, and have another ones to the clothes? Because some clothes doesn’t cover the entire part of the body, like a sleeveless t-shirt. Part of the torso will appear, so there is no need to model the parts of the torso in the t-shirt, only the t-shirt itself. Because that the model have the body part and the cloth part. With the jumper the torso and the arms can be hidden, to have less tris to be rendered.
Take a look at the pictures bellow:
This is the chibi body with the clothes parts hidden. There is only its skin.
The chibi with the clothes parts visible, all with a magenta material. As you can see, the clothes parts doesn’t need to be complete and doesn’t need to have a texture (any material can be used), once they work as a placeholder only.
To make it work correctly, all the objects (char body, clothes and the placeholders) need to have the point of origin (or anchor) in the same place. It can be seen in games like Oblivion/Skyrim, their models have their point of origin in the ground, between the feet. It ensures that the placement of the parts will be correct. And check if all the objects have the same scale, because, you now, bones can change the size of the mesh if the scales are different.
You don’t need to create the clothes inside the same file as the body of the character, only the placeholders. You can have one file for each cloth part; they need only to have the same armature and same point of origin.
In the folder Models of the project there is all the models files:
* chibi, that is the character file with the character mesh, armature and clothes placeholders
* each file for each cloth file, with the cloth mesh and the armature
* infiback, that is the model used to make the infinite background, instead of using a plane and a skybox.
The animation is in a separate file, inside the folder Animations. All model files, and the animation, are in Blender format. I don’t use fbx exported from Blender because I’m having some weird issues with animations. Once Unity imports the Blender file, I use it.
Now, how it works in code? It’s very simple: change the shared mesh of the SkinnedMeshRendener of the object by a new one:
The source object is a prefab, stored inside the Resources folder. You don’t need to create a prefab for each texture of each cloth, only one prefab of the cloth to act as a donor of the mesh, the texture will be applied later in the cloth placeholder:
So, you need to have each material to each texture of clothes. In this example, we have one prefab called jumper and two materials for jumper’s texture: jumper_black and jumper_red.
I this example project I used relation tables, to tell to script what object represents what part of body, or what type of cloth. So, I don’t need to find each part by name inside the script. The relation tables are public Lists, that can be accessed in the Inspector allowing to set what object belongs to what part of body or cloth directly in the editor.
The script CustomizeObject has all the code to change the clothes meshes, apply the textures, and assign other objects (like hair) to bones. It also have enumerations of body and cloth parts, and the relation tables for body parts, cloth placeholders and bones that can receive addons. This script is added to the character model.
The panel with the cloth options is controlled by the script ChangeClothes. It’s added to an empty GameObject in the scene. When a cloth is selected, the script calls the CustomizeObject method to change the clothes. The panel is made with UI controls (scrollview, and the buttons are created at runtime).
The script ClothesDB holds the information about all the clothes and addons available, loading it from a JSON file called clothes_db.json, and storing in collections. The clothes panel is built with information from this class. It’s also added to an empty GameObject in the scene. To parse the JSON file I’m using the SimpleJSON plugin (you can found it here: http://wiki.unity3d.com/index.php/SimpleJSON).
You can make your own system to store information about the clothes, as well to save the information about the character. The objective of this tutorial was only to show how you can implement a cloth system using only the objects of unity and to show the power of the SkinnedMeshRenderer.
For more information about how Unity works with meshes, check the documentation: http://docs.unity3d.com/Manual/comp-MeshGroup.html
- Tips for creating the models
This matter is very extensive, but here I will highlight some hints about creating the models.
* As said before, all models that will be used by the SkinnedMeshRenderer need to have the same Center of Origin.
- For the rigid elements that are added to bones, the Center of Origin need to be the same as the base of the bone that will receive the object.
Note here: I work only with Blender. Objects in Unity are aligned by their anchors (or center of origin), so you will need to check it in your modelling software.
* The clothes doesn’t need to be in the same file as the model, they only need to use the same armature (bones names).
* If you want to hide some body parts of the char, you need to “cut†your models into different objects. First, model you char as one object, them select the parts and separate them. All objects will retain the weight mappings.
It’s useful to create clothes. In Blender go to Edit mode, select the faces you want to use as base, duplicate it and then create a new object with those duplicated faces. Create your cloth from here. Don’t forget to check the Weight Mapping later.
* Its better to use only one material for clothes, to make it simple to change the material of the mesh later. If you need to have more than one material, you will need to make your code to work with multiples materials.
- Final Considerations:
* Can I use your models?
Yes, you can. I only warn you that they are old models, from when I was learning to modelling, so the topology isn’t good and the polys is a little high.
* When importing a model, what Animation Type of Rig I need to use?
Generic or Humanoid, both works. But you can have problems if you use an Humanoid model with a Generic model.
* How the mirror was made?
With a second camera (Mirror Camera) rendering to a texture (Target Texture property of the camera). Then the texture was applied to a 3D plane (Mirror).
* What software you’ve used to make the models?
Blender3d, version 2.72b. Any 3D modelling software that can work with rigging do the job.
* If I have problem implementing it with my own code, you will help me?
No. As I said in the beginning, this tutorial is for advanced developers. Khajiit helps if you have coin
* Why a tutorial? Why do you not sell it as an asset?
Well, this module was only possible after reading a lot of others people talks about it. I needed only to join the pieces I’ve found to make it work. So, I will not sell it. But if someone wants to make a donation as a gratitude for my effort, this one will be very glad
Менять одежду на персонажах из MakeHuman в Unity3d
Цель статьи — перенести персонажа из Makehuman в Unity3d так, чтобы его одежду можно было снимать и надевать прямо во время игры.
Для этого нам понадобится Makehuman, Blender3d, Unity3d и его плагин UMA (они все бесплатные). Статья написана по мотивам этого ютуб канала, повторяя за автором я набил много шишек, и теперь готов изложить своё видение.
Этап 1: Создание персонажа в Makehuman

Это самый легкий и приятный этап, тут необходимо смоделировать персонажа. Makehuman довольно простая программа, поэтому не буду описывать, как в ней работать.
Несколько дополнительных моментов
Не надо менять позу персонажа.
Одежду можно экспортировать по частям. То есть не надо напяливать все шмотки сразу, можно, например, сначала сохранить персонажа, у которого только штаны с рубашкой. В блендере экспортировать их, затем вернуться в makehuman, снять старую одежду и повторить операции экспорта, например, для шляпы и ботинок.
Единицы измерения метры, значит что десять клеточек в makehuman будут означать условный метр

Этап 2: Обработка его в Blender3d
Тут нам нужно сделать три вещи:
Добавить глобальную кость
Нарезать части тела
Запускаем Blender3d. Для начала нам нужно удалить свет, камеру и куб и импортировать нашу модель. Затем импортируем нашу модель: File -> Import -> fbx (и выбираем наш fbx файл)
Грабля на которую я наступил
Первый раз когда, потратил время на создание персонажа makehuman, в блендере нажал на экспорт вместо импорта (в результате в мой fbx файл записалась пустая сцена, и пришлось заново создавать персонажа). Тоже самое касается импорта.
Нормализация
Очищаем трансформацию позы
Переходим в блендере в режим позы

Переход в режим позы
Выделяем всё, (клавиша a)
Затем нажимаем pose ->clear transform -> all

Очистка трансформации
Чтобы проверить, что трансформации очищены, можно перейти в режим редактирования. Модель не должна при этом измениться.
После этого персонаж развернулся на 90 градусов, нужно вернуть его обратно
Вращение персонажа в блендер
Сначала нужно перейти в объектный режим.

Переход в объектный режим
Напоминаю что мышь должна находиться на экране с моделькой. Далее нужно нажать R для перехода в режим вращения, затем X для того чтобы вращение было только по этой оси. Затем на клавиатуре набрать -90 и нажать Enter
И наконец, нужно очистить внутреннее масштабирование и вращение всех мешей.
Очистка масштабирования и вращения
Для модели нашего персонажа нам нужно добиться чтобы все его меши имели вращение 0° и масштабирование 1.000 (без изменения формы самих мешей естественно).
Для этого нужно, в объектном режиме выделять каждый меш (включая арматуру ) нажимать на ctrl + a, и выбирать пункт rotation & scale.
Добавление глобальной кости
Теперь нам нужно добиться, чтобы скелет был совместим с UMA. Для этого нужно добиться такой иерархии костей.
Пошаговая инструкция как этого добиться
Выделим Root кость и переименуем её в Position. Затем выставляем у неё характеристики Transform так же как на картинке.


У нас появится кость с именем bone, и её нужно переименовать в Global и выставить в ней те же характеристики, что и для кости Position.
Далее нужно сделать Global кость предком кости Position. Для этого нужно сначала свернуть список дочерних костей у кости Position.

Далее выделить кость Global, затем зажав shift, выделить кость Position. Перевести мышь на экран с 3d моделью и нажать на ctrl + p, в выпадающем меню выбрать keep offset.
Нарезка персонажа
Персонаж в UMA состоит из слотов — это такие части модели на которые можно надевать/снимать какую-нибудь шмотку. Например, когда мы надеваем броню на торс персонажа, у него должен исчезнуть торс и замениться торсом с доспехами.
В этом туториале мы разобъём персонажа на следующие слоты
Ноги (без ступней)
Первом делом нам нужно создать сетку швов (seams mesh). Для того чтобы можно было менять те части, которые идут единой сеткой (например чтобы голова выглядела приделанной к туловищу, а не как отдельная моделька). Для этого нам нужно продублировать главную сетку.
Создание seams mesh
Выделяем главную сетку (в моём случае она выглядит вот так). Прочие сетки (глаза, волосы и одежду) я скрыл.

seams mesh
Нажимаем shift + d, затем RMB

В результате она должна продублироваться.
И называем её seams mesh (либо любым другим названием).
Теперь осталось добиться того, чтобы вместо старого меша были отдельные части.
Переходим в режим редактирования нашей главной сетки (не seams mesh).
В подрежим редактирование поверхностей.

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

UPD: раньше выделял голову при помощи кругового выделения (клавиша c) и рентгеновского вида, но пользователь ValeryIvanov подсказал более удобный способ:
Нужно скрыть это кольцо (клавиша h), далее навести курсор на голову и нажимаем L (должна выделиться вся голова), затем снова показываем полосу на шеи, нажав на Alt + L. Далее нажимаем на P и в выпадающем меню выбираем SПelection. Всё, голова отделена.
Скрываем полоску на шеи (клавиша H)
Нажимаем на L чтобы выделить голову (курсор должен быть на голове)
Покзываем полоску (Alt + L) и отделяем выделенное (P -> Selection)
Не забудем переименовать получившийся меш.
Теперь такую же операцию нужно проделать с другими частями. В результате у меня получилась вот такая картина. Тут поменял ракурс и выделил торс и ступни чтобы было лучше видно меши на которые я разбил модель.

Ещё я нарезал одежду и переименовал части тела.

Таким образом, мы имеем seams mesh и множество мешей если собрать которые получиться модель персонажа. Каждый с одинаковой арматурой.
Теперь экспортируем персонажа в формате fbx (желательно в ту же папку куда экспортировали из makehuman потому что там должны лежать текстуры к нему)
Этап 3: Создание UMA расы
Подготовка сцены
Открываем unity, скачиваем вот этот ассет и импортируем его в unity. Это ничто иное как UMA — Unity Multipurpose Avatar, фреймворк который позволяет кастомизировать персонажей. Перетаскиваем префаб UMA/Getting Started/UMA_GLIB в иерархию.
Импорт персонажа
Создаём папку в юнити в которой будем работать, я назвал её characters. Перетаскиваем туда папку с нашим персонажем (fbx и текстуры). Возможно появиться сообщение о том, что некоторые текстуры не помечены как карты нормалей. Можно нажать fix now.
Для удобства при работе с UMA я закидываю всё в одну папку (в characters), потому что при создании и настройки ассетов постоянно приходиться указывать в них ссылки на друг друга. А каждый раз лазить по папкам не всегда удобно. В любом случае, после того как мы всё настроем можно будет навести порядок.
Выделяем в менеджере проекта нашу fbx модельку, в инспекторе снимаем галочку Convert Units, и нажимаем Apply. Далее переходим во вкладку rig в animation type, выбираем Humanoid и так же нажимаем Apply.
Теперь нажимаем в верхнем меню UMA -> Extract T-Pose (в менеджере проекта наша fbx модель должна быть выделена). В результате должна появиться папка TPoses с экспортированной т-позой.
Импорт персонажа
Генерируем риг
Экспортируем T-Pose
Для удобства перетаскиваем t-pose в рабочую папку
Создание слотов и оверлеев
В верхнем меню выбираем UMA -> Slot Builder, появившийся окно я перетаскиваю рядом со вкладкой иерархии. Нажимаем на стрелочку рядом с fbx моделью и находим там часть seams mesh и перетаскиваем её в поле seams mesh в Slot Builder. В UMAMaterial выбираем UMA_defuse (для простоты). В slot destination folder переместите папку куда будут генерироваться слоты.
Теперь перетаскиваем части которые должны выглядеть единым мешем в панель automatic Drag and Drop porcessig. Это голова, торс, ноги и ступни (но не глаза и волосы). После того как закончили, в seams mesh выберите None и подобным образом перетащите глаза, волосы и одежду.
Открываем Slot Builder
Помещам его рядом с иерархией
Нажимаем на треугольник, чтобы развернуть модель
Перетаскивам сетку швов
Выбераем материал
Указываем папку где должны появиться слоты
Через ctrl выделяем части, которые связаны между собой
Переносим их на панель «automatic Drag and Drop porcessig»
Устанавливаем Seams Mesh в None
Аналогично переносим части которые могут сниматься/надеваться
Переименуем все слоты (как файлы, так и имена в инспекторе) и перенесем их в рабочую папку
Теперь нужно создать оверлеи. Оверлей это по сути текстура, созданная специально для UMA, которую можно комбинировать с другими такими текстурами, используется например для добавления шрамов, татуировок, макияжа, рисунка на щите (ещё можно добиться чтобы цвет этого рисунка на щите менялся программно). Итак, правый клик мыши в менеджере проекта , Create -> UMA -> Core -> Overlay Asset. В Overlay name впишите имя оверлея (например skin), в material выберете тот материал который указывали при создание слотов (в нашем случае это UMA_defuse) в спойлере количество каналов укажите 1 , и перетащите в появившиеся поле _MainTex соответствующую текстуру. Ту же операцию проделайте для других текстур.
Создаем оверлей (рекоменую в папке с текстурами)
Переименовываем его и задеём имя
Выбираем тот же материал, что указали при создани слотов
Указываем количество текстурных каналов 1, и перенести текстуру
То же самое проделайте для глаз, волос и одежды. По завершении, оверлеи лучше перенести в рабочую папку.
Результат
Откройте Global Library
Перенесите рабочую папку в панель «Drag indexable assets here to Add them to the index»
Создание TextRecipe и RaceData
Теперь нужно назначить Wardrobe Slots, это что-то типа ячейки инвентаря, куда можно надеть шмотку. В них помещается Wardrobe Recipe. Wardrobe Recipe по сути это сама шмотка. В чем же его отличие от обычный слотов? Слот это сменяемая одна из частей модели, вардроп рецепт это информация о том как этот слот (шмотка) будет надеваться на тело. Например если есть шляпа, то слот шляпы будет содержать меш шляпы, (и информацию о том, оверлеи с каким материалом с ним совместимы). А Wardrobe Recipe будет содержать ссылку на этот слот, нужные оверлеи, и информацию о том что нужно убрать волосы (и другую шляпу если она есть), и ещё скрыть часть головы, если её части проходят сквозь шляпу. Поэтому в Wardrobe Slots можно создать примерно вот такой список:

Создаем Race Data и Text Recipe
Я назвал их MaleRace и BaseRecipe соответственно
Перемещаем BaseRecipe
Перенеситье т-позу, и введите название расы
Задаём Wardrobe Slots
Укажите ссылку на расу (и, при необходимости, добавте её в глобальную библиотеку)
Переносим слоты тела
Если не добавляли слоты в индекс, нажмите на «Add to Global Index (Recommended)».
Перенесём соответвующие оверлеи (и, если попросят, также добавим их в глобальную библиотеку)
В резуьлтате должно получить вот так
Добавление персонажа на сцену
Всё что мы до этого делали было подготовкой к этому шагу. Настраиваем сцену (например добавляем плоскость, играющую роль земли). Перетаскиваем префаб UMA/Getting Started/UMADynamicCharacterAvatar в сцену (можно переименовать его). В инспекторе в компоненте Dynamic Character Avatar в поле Active Race выбираем нашу расу.
У меня по умолчанию не запустилась анимация (для базовых рас тоже, поэтому подозреваю что это недоработка). Глубоко этот вопрос пока не изучил, но сумел добиться чтобы она воспроизводилась. Для этого под спойлером Race Animation Controllers в списке Race Animators удаляем все элементы и добавляем новый, в Race указываем нашу расу, в Animator выбираем IdleTest-w-head.
Нажимаем на Play. У вас должен появиться персонаж которого мы собрали.
Создаем пол
Переносим префаб UMA/Getting Started/UMADynamicCharacterAvatar на сцену
В поле Active Race выбираем нашу расу, лысый мужик должен смениться нашей моделью
Удаляем старые аниматоры
Нажимаем на кнопку Add Race Animator
Указываем нашу расу в поле Race
Указываем анимтор IdleTest-w-head
Запустив игру, мы увидим нашу фигуру
Добавление одежды
Теперь создадим одежду Create -> UMA -> DCS -> Waredrop Recipe, выделяем созданный ассет назначаем ему расу, задаём имя и назначаем Wardrobe Slot . Затем по аналогии с созданием базового рецепта, перетаскиваем на панель слот и оверлей той шмотки которую мы ходим создать. Затем перетаскиваем этот ассет в глобальную библиотеку, так же как мы делали ранее. Проделываем эту операцию для других шмоток и волос. Теперь выделяем нашего персонажа в иерархии, в спойлере Customization -> Default Recipes перетаскиваем созданные вардроп рецепты на панельку.
Если тело проходит сквозь одежду, то нужно создать сетку сокрытия. Create -> UMA -> Misc -> Mesh Hide Asset, указываем слот с частью тела, который нужно частично скрыть, нажимаем на кнопку Begin Editing и в редакторе выделяем те грани, которые будут скрываться при надевании этой шмотки. Далее в Waredrop Recipe нажимаем на кнопку Add Mesh Hide Asset, и выбираем сетку сокрытия.
Теперь можно надевать и снимать эту вещь. Для этого выбираем наш Dynamic Character Avatar, и в спойлере Customisation -> Default Waredrop Recipes перетаскиваем на панельку наш вардроп рецепт.
Создаем wardrobe recipe
Переименовываем его, и указываем Display Value
Указываем wardrobe slot в котрой будет надета шмотка
По аналоги с созданем TextRecipe добавлем слот.
. и оверлей (не забываем добавить их в глобальный индекс)
Запускаем игру и петаскиваем сюда наш рецепт
На всякий случай скажу что если надеть их не в игре, а в режиме редактирования, то их не нужно будет каждый раз заново надевать.
Сетка тела, может в некторых местах проступать через одежду. Есть два варанта как поступить: назначить в wardobe recipe слот (слоты) которые будут скрываться при применение этого рецепта. Или можно добавить сетку сокрытия.
В случае на скриншоте можно просто скрывать весь слот

Указываем вардроп-слот, связанные с котором слоты должны скрыться.
Но если одежда покрывает не весь слот (то есть скрыть слот не варант) то на помощь придет сетка сокрытия.
Создаём сетку сокрытия
Выбираем расу
Выбираем слот, и нажимает Begin Editing
Альтернативный способ, это сразу перенести слот части тела, которую нужно скрывать этой сеткой сокрытия, в поле Slot Data Asset, в моем случае это ноги (не шатаны).
Выделяем те части слота, которорые будем скрывать. Завершив, нажимаем на «Save & Return»
И в нашем вардро рецепте назначам нашу сетку сокрытия
Запускаем игру
Запустив игру и надев нужную деатль одежды (в нашем слчае штаны), мы теперь увидим что они не просвечивают.
Добавление и удаление одежды программно
Для этого нужно использовать методы компонента DynamicCharacterAvatar. Для добавления SetSlot и ClearSlot для удаления, после этого нужно вызвать метод BuildCharacter. Первый аргумент SetSlot это имя слота куда необходимо надеть шмотку. Полный список доступных слотов можно посмотреть в файле расы. Второй аргумент это имя файла нашего Waredrop Recipe. В ClearSlot нужно использовать только имя слота.
Первый аргумент в SetSlot излишен (имхо)
На мой взгляд, информация о том куда мы надеваем шмотку излишняя. По сути, значение первого аргумента SetSlot всегда совпадает с полем Waredrop Slot соответствующего Waredrop Recipe.