FBX的使用与Animation设置是一个很有必要的技能,对于美工MM送过来的3D模型你应该懂得如何将其设置到游戏场景之中使用,不然真的羞死人的,这都不会。毕竟游戏里面许许多多的主角的动作都是一系列已经做好的3D动画,包括行走、攻击动作等,很少人在update()中来写一大堆来实现的。下面列举两个例子,说明FBX的使用与Animation设置,说白了,就是3D模型如何在Unity3D中使用。

文中所用到的两个3D模型:

Ezreal:http://download.csdn.net/detail/yongh701/9866792

Alice:http://download.csdn.net/detail/yongh701/9866791

一、材质贴图已打包为DDS、动画需要切割的FBX

1、导入

Ezreal是一个材质贴图已打包为DDS的FBX,其文件结构如下图所示:


那么在Unity3D中直接导入这个FBX文件即可。


导入之后如下图所示,可以看到Unity3D能够自动识别此类3D模型,同时,还能识别到3D模型中带有的动画,并且整个FBX模型所带的动画我们还能做个大致的预览,一般情况下,Take 001就是模型最初的动作。


这个模型被导入到Unity3D就是一个预设Prefab存在,你可以随意拖放,关于什么是预设Prefab,在《【Unity3D】利用预设、实例化Instantiate和协程完成生成器》(点击打开链接)我已经提到过了,这里不再赘述了。我们可以直接将这个Ezreal拖入场景当中,并且在(0,5,-10)拖一个Directional light,给模型提供合理的光照,大家可以看到3D模型已经基本能够使用了。


2、动画切割

但这样还不行,我们刚才明明看到这个FBX模型是带有动画Take 001,而且Take 001里面带有3个动作的,一个是模型在静止时发呆的动作、一个是行走动作、一个是攻击的动作。我们需要将这样动作应用到模型上面来。

首先,我们要在FBX模型的控制面板,设置Rig中的Animation Type为Legacy,Generation按默认就行,然后点击Apply将动画应用到这个模型上。在Unity3D一般使用Legacy动画。


之后,我们需要对动画进行切割。打开Animation面板,添加三个片段,分别是idle发呆、run跑步、attack攻击,然后分别修改好名字。同时设置好其在Take 001的开始帧与结束帧,设置开始、结束帧的时候,可以边播放动画,边调试。一般美工MM也会告诉你,她设置的各段具体的开始结束帧,这里Ezreal的三段分别为0-39、40-65、66-96。同时对于idle与run的循环模式都从Once改成Loop,因为这是一个长期存在的行为。之后点击Apply,则可以看到Take 001被切割成我们要求的三段。


3、动画处理

之后我们则可以对这个模型附着如下的脚本AnimationScript.cs:

using UnityEngine;
using System.Collections;

public class AnimationScript : MonoBehaviour
{
    void Start()
    {
        Animation animation = this.animation;//动画控制器
        animation.Play("idle");//上来直接播放idle动画
    }
    void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 100, 30), "行走"))
        {
            animation.Play("run");
        }
        if (GUI.Button(new Rect(100, 0, 100, 30), "停止"))
        {
            animation.Play("idle");
        }
        if (GUI.Button(new Rect(200, 0, 100, 30), "攻击"))
        {
            animation.Play("attack");
            animation.PlayQueued("idle");//播放完attack之后再播放idle
        }
    }
}

可以看到脚本很短,甚至大家看代码都能直接知道意思,运行结果如下:


可以看到基本能够达到一个比较不错的水平了,如果你能有个做fbx模型做得很好的MM,和她配合下,其实基本实现很多东西了……当然现实中哪有这么浪漫?基本上要么自己一手包,要么就到外面的三维公司里面买,或者小成本点的,就自己收集些免费的fbx素材……

上面的动画可以看到行走run这个动画,循环之间的分P还有点小跳跃,这个要么就是没切割好,要么就是动画本身问题,在整个动画,三个动作之间,留得空隙过短,导致不好分割,很遗憾,我这里是后者……毕竟这个素材我也是在网上收集的……


这里说完一大类的FBX,下面说另一大类的FBX


二、材质贴图没打包、动画不需要切割的FBX

1、导入

alice是一个材质贴图没打包好的fbx模型,文件模型如下图所示:


那么我们需要在Unity3D的Assets根目录新建一个Textures文件夹,不可改名,就叫这个名字,不为什么。通过Import New Asset...一个一个将材质贴图导入,Import New Asset..貌似不支持多选的,所以只能一个一个导入。所以为了减少鼠标点击次数,请让你的美工MM,打包材质吧!那些做工精致的模型,估计材质贴图要上万。


之后,我们才在Assets根目录导入这个FBX模型,一定要遵守这个顺序,不然导入的模型会丢失材质的。

同样可以将个模型拖拽出来,沿Y轴旋转180度,也就是Rotation设置Y为180,并且与上面模型一样,在(0,5,-10)拖一个Directional light,给模型提供合理的光照。在Rig的动画同样设置为Legacy并且应用到模型。


2、由于这个模型只有一个无须切割的动画,因此可以直接附着如下脚本AnimationScript2.cs:

using UnityEngine;
using System.Collections;

public class AnimationScript2 : MonoBehaviour
{
    void Start()
    {
        Animation animation = this.animation;
        animation.Stop();//由于只有一条动画,无须切割,Unity3D默认将会直接播放这个动画的
    }
    void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 100, 30), "行走"))
        {
            animation.Play();
        }
        if (GUI.Button(new Rect(100, 0, 100, 30), "重新行走"))
        {
            animation.Rewind();
        }
        if (GUI.Button(new Rect(200, 0, 100, 30), "停止"))
        {
            animation["Take 001"].normalizedTime = 0;//定位到此动画的第0帧
            animation.Sample();//跳转
            animation.Stop();//再停止
        }
    }
}
这里基本已经完全展示如何使用Animation类的基本方法来控制动画了,其中这里唯一需要注意的一点,animation.Stop();单单是暂停动画,如果你想将动画调回第一帧再播放,需要如上的来使用Animation类的基本方法。

运行效果如下所示:



估计这两大例子基本已经能让大家明白Unity3D中3D模型的使用。

Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐