Una vez que tenga sus Blend Shapes configuradas en Maya:
Exporte su selección a FBX asegurándose que la casilla de animación esté marcada y blend shapes debajo de deformed models esté marcado.
Importe su archivo fbx a Unity (assets->import new assets->[name of file].fbx).
Arrastre el asset a la ventana de jerarquía. Si usted selecciona su objeto en la jerarquía y mira en el inspector, usted verá que sus Blend Shapes están listadas debajo del componente SkinnedMeshRenderer. Aquí usted puede configurar la influencia del blend shape a la figura predeterminado, 0 significa que la blend shape no tiene influencia y 100 significa que la blend shape tiene una influencia máxima.
También es posible utilizar la ventana de Animación de Unity para crear animaciones mezcladas, aquí están los pasos:
Abra la ventana de Animación debajo de Window->Animation.
A la izquierda de la ventana haga click en ‘Add Curve’ y agregue un Blend Shape que estará debajo del Skinned Mesh Renderer.
De aquí usted puede manipular los keyframes y Blend Weights (pesos de la Mezcla) para crear la animación requerida.
Una vez usted haya terminado de editar su animación usted puede hacer click play en la ventana del editor o la ventana de animación para pre-visualizar su animación.
También es posible configurar los pesos de la mezcla a través de código utilizando las funciones como GetBlendShapeWeight y SetBlendShapeWeight.
Usted también puede revisar qué tantas blend shapes un mesh tiene al acceder la variable blendShapeCount al igual que con otras funciones útiles.
Este es un ejemplo de un código que mezcla una figura predeterminada a dos otras Blend Shapes a lo largo del tiempo cuando es adjuntada a un gameobject que tenga 3 o más blend shapes:
//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;
}
}
}
}