Once you have your Blend Shapes set up in Autodesk® Maya®:
Экспортируйте выбранные элементы в FBX, удостоверившись в том, что отмечен пункт Animation, а в разделе Deformed Models выбрана опция Blend Shapes.
Import your FBX file into Unity (from the main Unity menu: Assets > Import New Asset and then choose your file).
Drag the Asset into the hierarchy window. If you select your object in the hierarchy and look in the inspector, you will see your Blend Shapes are listed under the SkinnedMeshRenderer component. Here you can adjust the influence of the blend shape to the default shape, 0 means the blend shape has no influence and 100 means the blend shape has full influence.
Также для создания смешанной анимации в Unity можно использовать окно Animation, вот пошаговые инструкции:
Open the Animation window under Window > Animation > Animation.
В левой части окна нажмите ‘Add Curve’ и добавьте Blend Shape, который находится под Skinned Mesh Renderer.
Теперь вы можете управлять ключевыми кадрами и степенью смешивания (Blend Weights) для создания необходимой анимации.
Как только вы закончили редактировать свою анимацию, вы можете просмотреть её нажав на кнопку play в окне редактора или в окне анимации (animation).
Существует возможность управлять степенью смешивания через код, используя такие функции как GetBlendShapeWeight и SetBlendShapeWeight.
Вы можете узнать количество используемых Blend Shapes для конкретного меша через переменную blendShapeCount, наряду с другими полезными функциями.
Вот пример кода, назначенного игровому объекту имеющему 3 и более смешанных форм, который преобразует с течением времени базовую форму в две другие смешанные формы.
//Using C#
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;
}
}
}
}