Version: Unity 6.0 (6000.0)
语言 : 中文
添加动画事件
创建人形角色 Avatar

使用混合形状

准备美术作品

在 3D 建模应用程序中设置混合形状后,请执行以下操作:

  1. 在 3D 建模应用程序中,启用以下导出设置:
    • 启用导出动画。
    • 为变形模型启用导出混合形状。
  2. 将选定项导出到 .fbx 文件。
  3. 将 FBX 文件导入到 Unity。
  4. 在层级结构窗口中选择新导入的模型。检视面板窗口会显示 BlendShapes 部分,其中包含 SkinnedMeshRenderer 组件下的所有混合形状。
  5. 对于列出的每个混合形状,可以将其影响(权重)更改为默认形状,其中:
  6. 0 表示混合形状没有影响。
  7. 100 表示混合形状具有最大影响。

在 Unity 中创建动画

要创建混合动画,请执行以下操作:

  1. 打开动画窗口(从 Unity 主菜单中选择:窗口 (Window) > 动画 (Animation) > 动画 (Animation))。
  2. 选择要添加混合形状动画的动画剪辑。可以选择创建新剪辑 (Create New Clip) 以创建新的动画剪辑。
  3. 单击添加属性 (Add Property),然后选择 [您的角色] > [您的角色身体] > 蒙皮网格渲染器 (Skinned Mesh Renderer),然后选择要生成动画的混合形状。
  4. 选择添加的混合形状属性,调整关键帧和混合权重,并设置关键帧。

要预览动画,请在编辑器窗口或动画窗口中单击播放 (Play)

脚本访问

您也可以使用 GetBlendShapeWeightSetBlendShapeWeight 等函数来通过脚本设置混合权重。

要检查网格有多少混合形状,请使用 blendShapeCount 变量。

以下代码示例展示了连接到具有三个或更多混合形状的游戏对象时,如何随着时间推移将默认形状与其他两个混合形状混合在一起:

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;
            }
        }
    }
}
添加动画事件
创建人形角色 Avatar