Version: 6000.3
语言: 中文
添加动画事件
人形头像

使用混合形状

准备图稿

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

  1. 在 3D 建模应用程序中,启用以下导出设置:
    • 启用导出动画。
    • 启用导出变形模型的混合形状。
  2. 将您的选择导出到 .fbx 文件。
  3. FBX 文件导入 Unity。
  4. 在“层次结构”窗口中选择新导入的模型。这检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
    请参阅术语表
    窗口显示 BlendShapes 部分,其中包含 SkinnedMeshRenderer 组件下的所有混合形状。
  5. 对于每个列出的混合形状,您可以将其影响(权重)更改为默认形状,其中:
  6. 0表示混合形状没有影响。
  7. 100表示混合形状具有完全影响。

在 Unity 中创建动画

要创建混合动画:

  1. 打开“动画”窗口(从 Unity 主菜单中:窗口>动画>动画)。
  2. 选择动画剪辑(Animation Clip可用于动画角色或简单动画的动画数据。它是一个简单的“单位”运动片段,例如(一个特定实例)“空闲”、“步行”或“运行”。更多信息
    请参阅术语表
    要添加混合形状动画的位置。你可以选择 创建新剪辑(Create New Clip) 以创建新的动画剪辑。
  3. 点击 添加属性(Add Property) > [你的角色]([你的角色身体]) > 蒙皮网格渲染器(Skinned Mesh Renderer) 选择[你的角色],然后选择要制作动画的混合形状。
  4. 选择添加的混合形状属性,调整关键帧标记动画中过渡的起点或终点的帧。关键帧之间的帧称为中间帧。
    请参阅术语表
    和混合权重,并设置关键帧。

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

脚本访问

你还可以使用 GetBlendShapeWeightSetBlendShapeWeight 等函数通过脚本设置混合权重。

要检查有多少个混合形状网格Unity 的主要图形原语。网格体构成了 3D 世界的很大一部分。Unity 支持三角或四边形多边形网格。Nurbs、Nurms、Subdiv 曲面必须转换为多边形。更多信息
请参阅术语表
has,则使用 blendShapeCount 变量。

此代码示例演示了如何在附加到游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
具有三个或更多混合形状:

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;
            }
        }
    }
}
添加动画事件
人形头像