版本:Unity 6 (6000.0)
语言:英语
添加动画事件
人形角色

使用混合形状

准备艺术作品

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

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

在 Unity 中创建动画

要创建混合动画

  1. 打开动画窗口(从 Unity 主菜单中:窗口 > 动画 > 动画)。
  2. 选择您要添加混合形状动画的 动画片段可以用于动画角色或简单动画的动画数据。它是运动的简单“单元”部分,例如(一个特定实例)“闲置”、“行走”或“奔跑”。更多信息
    参见 词汇表
    。您可以选择 创建新片段 来创建新的动画片段。
  3. 单击 添加属性 并选择 [您的角色] > [您的角色身体] > Skinned Mesh Renderer,然后选择要动画的混合形状。
  4. 选择添加的混合形状属性,调整 关键帧一个帧,标记动画中过渡的起点或终点。关键帧之间的帧称为中间帧。
    参见 词汇表
    和混合权重,并设置关键帧。

要预览您的动画,请单击编辑器窗口或动画窗口中的 播放

脚本访问

您还可以使用诸如 GetBlendShapeWeightSetBlendShapeWeight 之类的函数通过脚本设置混合权重。

要检查 网格Unity 的主要图形基元。网格构成了 3D 世界的很大一部分。Unity 支持三角形或四边形多边形网格。Nurbs、Nurms、细分曲面必须转换为多边形。更多信息
参见 词汇表
有多少个混合形状,请使用 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;
            }
        }
    }
}
添加动画事件
人形角色