Unity 6.3
0 онлайн 20 гостей 3 в системе
Вход

Работа с формами смешивания

Подготовьте художественное произведение

После того, как вы настроили формы смешивания в вашем приложении для моделирования 3D, выполните следующие действия:

  1. В приложении для моделирования 3D включите следующие параметры экспорта:
    • Включить экспорт анимации.
    • Включить экспорт смешанных форм для деформированных моделей.
  2. Экспортируйте свой выбор в файл .fbx.
  3. Импортируйте файл FBX в Unity.
  4. Выберите вновь импортированную Модель в окне Hierarchy. В окне Inspector отображается раздел BlendShapes, содержащий все формы смешения под компонентом SkinnedMeshRenderer.
  5. Для каждой фигуры смешивания, вы можете изменить ее влияние (вес) на фигуру по умолчанию, где:
  6. 0 означает, что форма смешивания не влияет.
  7. 100 означает, что форма смешивания имеет полное влияние.

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

Чтобы создать смешанную анимацию:

  1. Откройте окно Animation (из главного меню Unity: Окно > Animation > Animation).
  2. Выберите клипы Animation, в которые вы хотите добавить анимацию смешанной формы. Вы можете выбрать Создать новый клип для создания нового клипа Animation.
  3. Нажмите Добавить свойство и выберите [Ваш персонаж] > [Тело вашего персонажа] > Рендерер сетки с кожей и выберите форму смешивания, которую вы хотите анимировать.
  4. Выберите добавленное свойство формы смешения, настройте ключевые кадры и вес смешения и установите ключевые кадры.

Чтобы просмотреть анимацию, нажмите Играть в окне Редактора или окне 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;
            }
        }
    }
}