在制作游戏的过程中我们需要用到unity表情动画的使用,那么表情动画怎么样使用呢?下面我们就来学习unity3d 表情动画使用。3DMax和Maya做完Morpher动画导出的模型U3D是不支持的,因为一进来就会报错。U3D默认是不支持morpher动画的,具体理由我也不清楚。

不过,目前有两种方法可以实现Morpher动画的方法。

 一、直接将两个模型进行对比,顶点渐变变形。
       原理:读取两个模型,然后一个作为目标模型,一个作为初始模型,根据渐变参数来调用当前变形模型。
function SetComplexMorph (srcIndex : int, dstIndex : int, t : float) {
if (m_SrcMesh == srcIndex && m_DstMesh == dstIndex && Mathf.Approximately(m_Weight, t))
return;
var v0 = m_Meshes[srcIndex].vertices;
var v1 = m_Meshes[dstIndex].vertices;
var vdst = new Vector3[m_Mesh.vertexCount];
for (i=0; i
vdst[i] = Vector3.Lerp(v0[i], v1[i], t);
m_Mesh.vertices = vdst;
m_Mesh.RecalculateBounds();
}
实际例子,参照U3D百科:
http://wiki.unity3d.com/index.php?title=MeshMorpher
 二、用插件Mega-Fiers
        Mega-Fiers插件是目前U3D作为各种变形插件最好最全的,不过其代码太多了,直接用还好,倘若你要改的话,还要研究半天。
       Mega-Fiers里的morph功能是要配合插件一起用的,插件要向作者要。相当于作者写了个东西直接导出了一个morph的格式,然后在U3D里面读这个格式来实现MORPH功能。
       1.插件来源:
       a.直接上官网买正版,邮件给作者向他要附属插件。
       b.U3D圣典论坛团购
       2.具体用法:
官网教程:
http://www.west-racing.com/mf/?page_id=1096
http://www.west-racing.com/mf/?page_id=1108
 3.注意问题:
       a. 由于模型的渲染是引用而不是复制的,所以实例化的模型都是引用同一个地址的数据。当morph改掉当前模型的时候,其他引用也会相应变化。
所以只用单个模型的话用mega-fiers是完全没问题的,但多个同样的实例化模型在场景之中,那么所有的模型都会播放同样的morph动画。
       b. 假设你需要不同的实例化播放不同的morph的话,那么就需要修改mega-fires的源代码。
原理:复制一份模型,将渲染的引用指向复制的模型。
代码:找到MegaModifyObject.cs,在FindMesh方法的返回渲染引用之前加上下面代码。
if (Application.isPlaying)
{
Mesh temp = Mesh.Instantiate(skins[0].sharedMesh) as Mesh;
skins[0].sharedMesh = temp;
mesh = skins[0].sharedMesh;
}
 4.多动画的切换动画
       项目当中我并没有直接用插件的动画播放方式,而是自己写了一个储存、读取和播放的代码脚本。
 原理:
       a .写Editor编辑器,记录你所需要的动画播放信息到一个json或者xml。其实只需要记录是用哪几个通道,每个通道的开始百分比和结束百分比就可以了。
       b. 读取文件信息,反解析成类,读取相关来调用所编辑好的动画。