在 3D 建模应用程序(例如 Autodesk® Maya®)中设置好混合形状后:
1.在 3D 建模应用程序中,启用以下导出设置:
* 启用导出动画。
* 为变形模型启用导出混合形状。
2.将选定项导出到 FBX 文件。
3.将 FBX 文件导入到 Unity。
4.在 Hierarchy 窗口中选择新导入的模型。Inspector 窗口会显示 BlendShapes 部分,其中包含 SkinnedMeshRenderer 组件下的所有混合形状。
5.对于列出的每个混合形状,您可以将其影响(权重)更改为默认形状,其中:
* 0
表示混合形状没有影响。
* 100
表示混合形状具有最大影响。
要创建混合动画,请执行以下操作:
1.打开 Animation 窗口(从 Unity 主菜单中选择:__Window__ > Animation > __Animation__)。 2.在窗口左侧,单击 Add Curve,然后添加一个混合形状。Inspector 窗口会在 BlendShapes 部分的 SkinnedMeshRenderer 组件下显示新的混合形状。
通过调整关键帧和混合权重来创建所需的动画。
要预览动画,请在 Editor 窗口或 Animation 窗口中单击 Play。
也可以使用 GetBlendShapeWeight 和 SetBlendShapeWeight 等函数来通过脚本设置混合权重。
要检查网格有多少混合形状,请使用 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;
}
}
}
}