Работа с формами смешивания
Подготовьте художественное произведение
После того, как вы настроили формы смешивания в вашем приложении для моделирования 3D, выполните следующие действия:
- В приложении для моделирования 3D включите следующие параметры экспорта:
- Включить экспорт анимации.
- Включить экспорт смешанных форм для деформированных моделей.
- Экспортируйте свой выбор в файл .fbx.
- Импортируйте файл FBX в Unity.
- Выберите вновь импортированную Модель в окне Hierarchy. В окне Inspector отображается раздел BlendShapes, содержащий все формы смешения под компонентом SkinnedMeshRenderer.
- Для каждой фигуры смешивания, вы можете изменить ее влияние (вес) на фигуру по умолчанию, где:
0означает, что форма смешивания не влияет.100означает, что форма смешивания имеет полное влияние.
Создание анимаций в Unity
Чтобы создать смешанную анимацию:
- Откройте окно Animation (из главного меню Unity: Окно > Animation > Animation).
- Выберите клипы Animation, в которые вы хотите добавить анимацию смешанной формы. Вы можете выбрать Создать новый клип для создания нового клипа Animation.
- Нажмите Добавить свойство и выберите [Ваш персонаж] > [Тело вашего персонажа] > Рендерер сетки с кожей и выберите форму смешивания, которую вы хотите анимировать.
- Выберите добавленное свойство формы смешения, настройте ключевые кадры и вес смешения и установите ключевые кадры.
Чтобы просмотреть анимацию, нажмите Играть в окне Редактора или окне Animation.
Доступ к скриптам
Вы также можете установить веса смешивания через сценарии, используя функции, такие как GetBlendShapeWeight и SetBlendShapeWeight.
Чтобы проверить, сколько форм смешивания имеет Сетка, используйте переменные blendShapeCount.
В этом примере кода показано, как объединить фигуру по умолчанию в две другие фигуры объединения со временем, когда она присоединена к GameObject с тремя или более фигурами объединения:
using UnityEngine;
using System.Collections;
public class BlendShapeExample : MonoBehaviour
{
int blendShapeCount;
SkinnedMeshRenderer skinnedMeshRenderer;
Mesh skinnedMesh;
float blendOne = 0f;
float blendTwo = 0f;
float blendSpeed = 1f;
bool blendOneFinished = false;
void Awake ()
{
skinnedMeshRenderer = GetComponent<SkinnedMeshRenderer> ();
skinnedMesh = GetComponent<SkinnedMeshRenderer> ().sharedMesh;
}
void Start ()
{
blendShapeCount = skinnedMesh.blendShapeCount;
}
void Update ()
{
if (blendShapeCount > 2) {
if (blendOne < 100f) {
skinnedMeshRenderer.SetBlendShapeWeight (0, blendOne);
blendOne += blendSpeed;
} else {
blendOneFinished = true;
}
if (blendOneFinished == true && blendTwo < 100f) {
skinnedMeshRenderer.SetBlendShapeWeight (1, blendTwo);
blendTwo += blendSpeed;
}
}
}
}