Version: 2017.3
Дополнительные опции Blend Tree (Древа смешивания)
Animator Override Controllers

Применение Blend Shapes (форм смешивания) для анимации

Подготовка графического материала

Once you have your Blend Shapes set up in Maya:

  • Экспортируйте выбранные элементы в FBX, удостоверившись в том, что отмечен пункт Animation, а в разделе Deformed Models выбрана опция Blend Shapes.

  • Импортируйте в Unity свой FBX файл (Assets->Import New Assets->[имя файла].fbx).

  • Перетащите ассет в окно иерархии (Hierarchy). Если вы выберите ваш объект в окне иерархии и посмотрите в окно инспектора (Inspector), вы увидите, что ваши Blend Shapes перечислены под компонентом SkinnedMeshRenderer. Здесь вы можете настроить влияние Blend Shape на базовую форму, 0 означает, что Blend Shape не имеет никакого влияния, а 100 - что Blend Shape воздействует в полной мере.

Создание анимаций в Unity

Также для создания смешанной анимации в Unity можно использовать окно Animation, вот пошаговые инструкции:

  • Откройте окно анимации зайдя в: Window->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;
                 }
 
          }
       }
}
Дополнительные опции Blend Tree (Древа смешивания)
Animator Override Controllers