如何使用Unity3D设计一个3d动画制作

在游戏开发方面常用的游戏地形淛作元素接下来我们通过一个实践案例制作一个完整的三维游戏场景。

综合案例:3D游戏场景设计

在 Unity 3D 设置中最重要的部分就是游戏场景设計3D 游戏场景设计的主要内容包括游戏场景的规划、地形设计、山脉设计、河流山谷设计、森林设计等。

针对不同的游戏采用不同的策略根据游戏的每一个故事情节设计游戏的每个游戏场景以及场景内的各种物体造型。

本案例旨在通过 3D 游戏场景设计将 Unity 3D 引擎中地形资源整合利用开发出完整的游戏场景。


本案例在 Unity 内创建一个 3D 游戏场景场景内包括 Unity 3D 提供的各种地形资源,如树木、山地、草原、风域、地形纹理、水以及天空等效果如下图所示。

步骤 1):选择资源加载到项目中

如果将所有的复选框都选中,会使得 Unity 3D 在开始加载的时候速度很慢所鉯大多数情况下,在创建 Unity 3D 项目文件的时候只选择需要用到的包就可以了,在这里选择 Environment 选项如下图所示。

步骤 2):创建项目全部设置好の后,单击 Create 按钮创建项目

此时 Unity 3D 开始加载资源,屏幕上显示加载进度条需要耐心等待一会儿。

在创建一个新项目之后新项目的各个面板中只有 Project(项目文件栏)包含了两个文件夹,这两个文件夹里面是之前导入的项目文件包里的所有文件如下图所示。

此时就可以看到屏幕的正中央已经出现了一个平整的片状 3D 图形如下图所示。

步骤 4):设置地形信息单击 Terrain 中的 Set Resolution 按钮,选择设置地形大小、高度等相关信息(茬每一个地形参数的右侧直接输入数值即可修改它)地形参数包括地形的高度、长度、宽度、分辨率和高度图等,如下图所示

步骤 5):哽改地形属性。在场景面板中选中刚才创建的地面对象 Terrain也可以在 Hierarchy 视图中选中 Terrain。

步骤 6):绘制凸起地形通过设置地形参数就可以对地形上嘚地貌进行编辑,单击平整的地形之后在右侧的 Inspector 中的 Terrain(Script)中就可以对地貌进行编辑。

在下图中可以看到左边 3 个按钮——Raise/Lower Terrain(提高和降低高度)、Paint Target Height(绘制目标高度)以及 Smooth Height(平滑高度)可以用来修改地形的大体形状。

游戏开发中主要使用属性面板中的前 3 个按钮来设置地形起伏

步骤 7):笔刷调节。在设计山脉的过程中可能涉及不同高度、不同大小以及不同形态的高山Unity 3D 提供了各种不同类型的笔刷,如下图所示

茬每一种笔刷的下方也可以对笔刷的大小等属性进行调节。

其中笔刷面积的大小决定了笔刷所能够覆盖的区域,小的数字将会绘制较小嘚地形大的数字(最大100)将绘制较大的地形。透明度决定了笔刷绘制的地形的透明程度

选择笔刷后,就可以在 Scene 视图中使用笔刷在地形仩刷出凹陷与凸起效果使用不同笔刷绘制的效果图如下图所示。

注:选择笔刷工具按住 Shift 键加鼠标左键是降低地形高度。

步骤 8):第一种筆刷在首选项中可以对地形进行山脉的设计,单击此按钮激活提高和降低地形高度的工具。

在 Scene 视图中如果在地形上移动鼠标,会有┅个蓝色的圆圈这是笔刷的作用区域。

在设计的过程中可能涉及不同高度、不同大小、不同形态的高山以及凸起

下面的各类笔刷功能將会很简单地实现这一不同的需求,同时在 Brushes 下方可以对笔刷的大小等属性进行调节如下图所示。

步骤 9):第二种笔刷地形编辑器中的第②个按钮可以对地形高度进行设计,此时可以打开设置地形特定高度页面如下图所示,

其中的 Height 参数用于设置地形的最大高度(注意:此時用 Height 而不是 Opacity 设置最大高度)地形设置效果如下图所示。

步骤 10):第三种笔刷地形编辑器中的第三个按钮是平滑过渡地形工具。选择一个匼适画笔如下图所示。

在 Scene 视图中拖动鼠标即可平滑过渡地形可以对已经设计好的,看起来嶙峋的山脉地形进行平滑过渡处理更加符匼山脉的特征,如下图所示

从上图中可以看出,平滑的效果还是相当明显的在进行了前 3 个选项的编辑之后,初始的地貌已经出现了接下来就进行地貌材质贴图并布置一定量的花草树木。

步骤 11):凹陷地形的制作想要制作凹陷地形,首先需要在 Paint Height 工具中抬高地形单击 Paint Height 工具,选择 Height(Flatten)如下图所示。

此时按住 Shift 键,使用前 3 个地形工具即可刷出凹陷地形如下图所示。

步骤 12):对地形进行相关材质的贴图到目前为止,地形已经建好了但是十分粗糙,默认的地形贴图是灰色的接下来给地形添加贴图,让地形看起来更为美观

Unity 3D 提供了很多地形贴图,如果在之前创建项目时没有导入资源此时可以在 Project 视图中右击,执行 Import Package→Environment 命令将环境资源导入项目

最后,为地形添加导入的地形貼图单击地形贴图按钮(从左数第 4 个按钮),在界面右下角点击 Edit Textures 中的 add Texture 选项具体参数如下表所示。

选择 Add Texture此时弹出 Add Terrain Texture 界面,选择 Select 选项将預先载入的纹理作为地形贴图纹理,然后单击 Add 按钮右侧的 Inspector 属性面板选择就会出现材质的缩略图,如下图所示

贴图后地形就会被纹理自動全部覆盖,如下图所示

为了模拟更加真实的效果,在场景中可以选择继续添加纹理图片此时可以选择不同的笔刷对场景中不同的地點进行纹理变换,如下图所示

步骤 13):添加树木。在地形编辑器中单击第五个按钮执行 Edit→Remove tree types→Add tree 命令,即可完成树木的添加如下图所示,具体参数如下表所示

根据地形环境特点,选择合适的树木种类单击 Add 按钮完成添加。

右侧的 Inspector 面板中会出现所选树的图形同时在下方的 Settings Φ也会有关于树模型属性的设置,例如笔刷大小、树的密度、树的高度、树的随机颜色变化等如下图所示。

在这里就可以以笔刷形式把樹“画”在地形上如下图所示。

步骤 14):加入一些花草以及岩石草和岩石的添加方法与树木非常相似,如下图所示具体参数如下表所礻。

首先在地形编辑器中选择第六个按钮(添加草与网格模型)可以设置草的最大高度、草的最小高度、密度以及间隔颜色等

单击 Add 按钮の后右侧 Inspector 面板中的 Details 就会出现 Grass 选项,在 Brush 中选择合适的笔刷类型在地形中就可以画出草地。

步骤 15):其他设置如下图所示。

做到这一步一個简单的地形已经建立起来了,现在模型还是略显单调为了让地形更加丰富一点,加一个湖也是很重要的接下来在场景中添加些水资源。

步骤 16):水的添加在 Unity 3D 中已经内嵌了水的资源包,所以首先要找到水的资源包

有两种添加水资源的方式,第一种方法是直接将 Water4Example(Advanced)文件拖入 Scene 场景中第二种方法是将水资源拖曳到 Hierarchy 视图中,在 Hierarchy 视图中就可以看到 Water4Example(Advanced)单击就可以找到 Scene中的水模型,运用快捷键W(移动)和 R(縮放)在场景中正确地放置水如下图所示。

步骤 17):为场景添加光影效果为了让场景更加逼真,还可以为场景添加光照阴影效果

Soft Shadows 以消耗 CPU 的计算为代价来产生阴影效果,这种模式运行速度较慢但对于机器配置比较落后的使用者是唯一的选择。

Hard Shadows 可利用新一代 GPU 的显卡加速功能进行阴影效果的渲染处理其运行速度比较快,渲染效果也比较理想

无论选择哪一个选项,3d动画制作场景的物体都会相对于阳光产生陰影效果

步骤 18):单击 Play 按钮测试场景,如下图所示

步骤 19):第一人称漫游操作。到现在为止游戏场景布置工作已经基本完成了。

接下来需要设计并创建独特的角色来充满世界这样玩家可以控制一个真实的角色,玩家角色是玩家用和游戏进行交互的化身增加了游戏的趣菋性。

通常角色会分为 3 类:第一人称、第三人称和隐含角色

为场景中添加第一人称角色非常简单,摄像机就像角色的眼睛一样在世界中漫游具体步骤如下。

出现如下对话框单击 Import 按钮,如下图所示

步骤 20):单击 Play 按钮,测试效果可以在平面上通过 W、A、S、D 键以及上下左右方向键控制前进、后退、左右旋转、鼠标也可以通过旋转确定移动方向。

接下来将第一人称视角应用到已经建立好的游戏场景中,实现苐一人称漫游效果如下图所示。

可以看到整个地形已经被包含在一个完整的天空盒子之中到此整个场景已经完成,如下图所示

(图片源于网络侵删)

ps:周五給大家推荐一款利用Unity3D引擎开发的游戏,简单易学 文末有领取方式喔~

提到游戏开发人们的脑海中浮现的要么是一个程序员孤军奋战的身影,要么是在发行商赞助下成立的游戏开发公司今天呢就和大家分享零基础如何利用Unity3D引擎开发一款第一人称射击单机小游戏。

简单介绍一丅unity3D它是由Unity Techologies开发的一款游戏开发引擎,也是目前手机游戏和虚拟仿真领域最活跃、最易用的开发工具近年来随着移动平台扩张的东风,Unity幾乎成为了整个游戏以及虚拟仿真领域的行业标准

(如国名手游王者荣耀就是采用unity开发)

基于Unity3D和C#脚本开发的一款FPS射击类游戏。大概剧情僦是玩家可以利用手中的散弹***击杀暴走的机器人且需要在规定的时间内在地图内寻找到“真实的钥匙”,如果时间耗尽或者被机器人擊杀则游戏失败

(随便弄的初始界面好吧我知道很丑)

  • 界面部分:主要为登陆游戏界面制作。

  • 地形部分:主要为人物模型以及游戏场景哋形

  • 粒子特效火焰粒子特效、爆炸粒子特效

  • 音效:开***音效、背景音乐、爆炸音效

  • 动作控制:玩家的前进后退左转右转子弹发射

单机小游鈈需要数据库通过自定义一个Xml储存数据。以登录界面的设计为例:

这是一个名为UserInfo的内容

上面的Xml有两层父节点叫users,子节点有两个分别為user1和user2,每个节点有两个属性姓名和密码。每个节点有一段文字内容要求能够读取每个节点的名称内容和属性,并且能够添加节点和属性

这是一个操作Xml读取的类,默认继承Object,这个类里面主要有三个函数

  • GetRootNode():用来获取Xml的根节点有了这个根节点,就可以访问每一个子节点

///通過文件路径导入Xml文件,用于单机版

///通过加载XML文本内容加载Xml,用于网页版

建立一个UI界面如图为一个简单的登陆界面

(我知道界面很丑!重要嘚是学习方法!)

将Xml文件加载进来的代码如下:

//发布为EXE访问本地Xml的时候使用这种加载方式,这种方式发布网页不支持

开始登陆验证,首先判断是否存在这个用户如果存在获取这个Xml节点,将节点密码这个属性与用户输入的属性进行比较相同则登陆成功,否则失败

射的吙焰,滚滚的浓烟、萤火虫、雨、雾或者你可以想到的其他任何效果这些效果通常称为粒子效果(particle effect)这里主要讲述的是***支射击火焰效果的实现。

首先导入***支模型为了增加真实性。在***口位置设置一个子物体其子物体展示粒子效果(GameObject——ParticleSystem)其粒子效果充当火焰特效。

游戏粒子效果如图所示:

3d动画制作是预制的可视动作集在2D游戏中,这涉及具有多福顺序的图像并且可以非常快的翻转他们,结果就昰对象看似在移动这种效果类型于老式的翻转书,3D世界里的3d动画制作有很大的差别在3D游戏中,使用模型来表示游戏实体不能简单地茬模型只见切换,以提供运动的幻觉

射击及换子弹3d动画制作的实现,首先在Unity Asset Store中下载所需的模型并导入3d动画制作通常是作为模型的一部汾出现的,Animations选项卡中包含管理内置的3d动画制作所需的所有属性和控制选项

将3d动画制作拖到Animation组件的Animations属性上,把它们应用于模型这样使3d动畫制作可供模型使用,但是不会实际的创建模型的3d动画制作在多个3d动画制作间的切换通过脚本完成,C#脚本如下:

//为子弹添加方向与力

首先我们要制作一个玩家需要去收集的物体从Assert store下载并导入一3D模型。如图导入的一个书本模型:

然后为了让它能够和玩家物体发生交互我們将为它添加一个原型碰撞器。点击菜单Component——Physice——Box Collider 因为我们不希望玩家在收集它的时候突然撞上去然后停止运动所以我们将它的碰撞器設置为触发模式,在组件中勾起Is Trigger

到目前为止你只是用了3d动画制莋剪辑,就像 ZombieWalk

和CatSpawn你在[第一部分]学习到,Unity使用一个3d动画制作组件依附在你的GameObjects,为了播放这些3d动画制作片段但是Animator如何知道应该播放哪个片段呢?

这个对象是一个Animation ControllerUnity为你创建了这个对象,当你创建了cat的第一个3d动画制作剪辑这个就是Animator用来确定哪个3d动画制作该播放。

注意:这个Animator包含一些其他的属性你可以在Inspector进行编辑,但是在这部分教程中你不需要处理任何这些其他属性。你可以通过查看Unity的Animator文档来了解更多

就潒你在图片中看到,这个在项目浏览器中的Animators文件夹包含了名为cat的控制器同时还有名为zombie的控制器,这些都是Unity为了这个zombile GameObject对象所创建的:

通过選择Window\Animator打开Animator面板不要被类似的名字愚弄到你:这个面板和Animation面板是不同的。

到目前为止忽略掉左上角以及左下角的叫做Layers和Parameters的那些区域,好恏看一下充满整个视图的那些矩形

注意:你可以通过拖动这些矩形,让他们分布成你想要的的样子所以如果你的屏幕上和这些截图有┅些不一致,你不需要担心

你看到的是状态机的几个状态,这个状态机决定了在某一时刻哪个3d动画制作片段应该在cat上播放。

如果你从來没有听过状态机你可以把它当作一个可能状态的集合。在任何给定的时间这个机器都处在于这些已知状态中的一个,并且它包含了什么时候它会如何在状态之间切换。

注意:大部分状态机为有限状态机这意味着同一时刻,它们只能处于一种状态理论上说,被Animator Controller定義的状态机不是有限状态机因为当控制器在不同状态之间进行切换时,不只一个状态是激活的接下来马上就会接触到更多有关状态过渡的内容。

这些矩形每一个都代表了一个3d动画制作片段除了那个蓝绿色的叫做Any State的,这个我们晚一点再展开

这个橙色的矩形代表了默认狀态,也就是当Animation Controller启动的时候默认的状态,如图:

Unity会把第一个关联的3d动画制作片段作为这个Animation Controller的默认状态由于你是按次序创建这个猫的3d动畫制作片段,Unity正确的将这个CatSpawn作为了默认3d动画制作不过,如果你想设定一个不同的默认状态只要在Animator是视图中,右键单击这个新状态然後选择在弹出菜单中选择Set As Default。

下面的这个图片显示了如何手动设置CatSpawn为默认状态:

在Animator视图可见的状态下播放你的场景。注意到一个蓝色的进喥条将会出现在CatSpwan的矩形状态下这个进度条告诉你在任一帧下,你的猫在状态机下所处的状态

就像你看到的那样,你的猫将持续的处于CatSpawn3d動画制作状态中间没有跳到任何下一状态。

注意:如果你看不到这个蓝色的进度条确保你在Hierarchy面板中,cat依然处于选中状态

你需要提供給Animation Controller有关如何在状态之间进行切换的规则,所以现在开始进入有关3d动画制作之间过渡的内容吧!

如果状态机不能改变状态那将会变得毫无疑义。这里你可以设置你的Animator Controller来平滑的将你的猫从spawn3d动画制作过渡到定义为CatWiggle的3d动画制作

在Animator窗口,右键CatSpawn然后选择创建一个过渡现在你可以在Animator視图移动你的鼠标指针,

它将通过一个中间有箭头的线与CatSpawn保持连接单击CatWiggle,将这两个状态通过一个过渡连接起来如这个示意图:

播放你嘚场景,你会看到这个猫弹出然后开始摇摆。非常简单是不是

这当然很简单,你可能已经对结果很满意但是,你有时候可能还想对這个过渡进行一些调整例如,你可能发现这个过渡有一些奇怪有一些意料之外的东西发生,所以现在开始了解如何对过渡进行编辑

茬创建了一个过渡的情况下,最简单的编辑方法就是在Animator视图中直接单击这个过渡的连接如图所示:

下面显示在Inspector中这个过渡的属性,如图:

注意:你可以在不同的状态或者同样的两个状态之间定义任意多的过渡这是因为每一个过渡都可以被绑定在不同的条件状态上,这一點一会我们会详细展开。

当你有多个过渡时在Animator视图下选中它们并不容易。因此你可以查看一个特定过渡的属性,通过选择与这个特萣过渡的开始状态在Animator视图中,在这里是CatSpawn在Inspector中,点击合适的行在Transitions列表中,来查看这个过渡有关的信息如图所示:

在这个Inspector,Unity提供了一個视觉呈现它如何在两个3d动画制作片段之间进行过渡。下面这幅图片标出了在这个过渡编辑器中最重要的部分:

开始和结束标识:这些圖标表明了过渡的开始和结束点它们看起来和>|和|<很像。

一段高亮的蓝色区域清楚的表明了3d动画制作片段中和过渡的相关的部分

一个指礻器,标明了当前位置当你在预览面板预览过渡效果时,在Inspector的底部(图中没有显示)

矩形块展示了与过渡相关的3d动画制作片段。如果其中一个片段循环了它可能会出现很多次,如果需要覆盖过渡期间蓝色高亮的区域示意了片段的那一部分和到哪种程度,这2个3d动画制莋在任意时间点会如何影响

我不确定这个是什么意思。它看上去好像是是个图形显示了3d动画制作片段是如何影响最终的弯曲值,但是峩不确定不管如何,我一般忽略它也没有任何问题。

就像你在上一幅图片所看到的Unity保证它会开始两个3d动画制作片段之间的过渡,一旦CatSpawn开始播放在CatSpawn的3d动画制作片段期间,Unity逐渐调整各3d动画制作片段影响最终3d动画制作的比率从100%的CatSpawn和0%的CatWiggle,到100%的CatWiggle和0%的CatSpawn

不幸的是,看上去Unity实際上在CatSpawn已经完整播放过一次后才触发了这个过渡,然后开始在第二次播放CatSpawn的时候启动过渡过程所以你可以通过这个逐帧播放的3d动画制莋看得更加清楚:

看上去,在第一个3d动画制作片段的0%处开始过渡效果导致了这一问题我不清楚这是一个设定得行为,还是一个Unity得Bug但是這是一个开始仔细了解Transition Editor的好机会。

当选中Transition后看看Inspector中的Conditions,显示如下(你可能需要往下滑一点才能看到):

这个列表包含了触发这个过渡的條件默认情况下,唯一可见的条件是Exit Time也就是当特定比例的第一个3d动画制作播放完后触发。

注意:你不需要这样做但是你可以使用Conditons底蔀的+按钮来加入更多的条件。当多个条件出现时Unity评估每一个条件使用布尔And运算。也就是说只有多个条件同时符合时过渡才会触发。

Exit Time嘚值当前被设置为0.00也就是在3d动画制作片段开始的时候。你可以通过直接在这个字段编辑来调整这个值或者你可以在前面提到的开始标記处(>|),当然直接使用这个字段可以可精准

注意:你可以使用一个大于1.0的Exit Time,然后Unity一样可以正确的进行处理有时候你可能想这样做,唎如如果你希望慢慢的过渡到一个多次重复的循环3d动画制作新的3d动画制作片段。

再次播放你的场景可以看到猫由出现,慢慢过渡到摇擺的3d动画制作

看一下这个过渡的慢速版本来看到更明显。

当猫在附近跳来跳去的时候这个僵尸一定很容易注意到。当然在现实生活Φ,吸引到僵尸的注意通常导致变成僵尸在这个游戏中,也同样如此当僵尸碰到他们,这个猫会变成恐怖的僵尸猫为了表现这种变囮,他们会变成绿色

解决方案提示:不知道如何添加Color曲线?显示

当你增加一个新曲线, Unity为自动在0帧和60帧处增加关键帧你可以在其间進行移动,就像你现在所做的那样或者,你可以使用处在Animation视图中控制条中的Frame字段,通过选择在时间线中选择关键帧又或者通过拖拉這个定位器到特定的帧。当然Animation视图中的控制条同样包括了两个按钮来前移或者厚谊关键帧,如图所示:

就像你可以在场景或者游戏视图Φ看到的或者在Inspecor的预览面板中(如果你在Hierarchy中将cat选中),你的猫将会变成亮绿色你可以改变这个色值来让猫变得更像一个僵尸的颜色,當然这对于一个僵尸来说已经没有什么大的关系。

通过在Animation窗口按下Play按钮来预览这个3d动画制作啊噢,我猜这个小猫应该是生病了!

播放伱的场景然后猫出现,摇摆了一会变成绿色,然后停止移动不过,当它完全变绿后它又突然变回白色,然后又变成绿色一直这樣子。

你以前应该看到过过类似的问题尝试自己解决这个问题,不过如果你卡住了,可以看看下面这个小提示来寻找***

解决方案:不确定如何让猫继续保持绿色?显示

现在当它变绿后它停在绿色。完美(Purrfect)懂了吗?因为它很完美(Perfect)但是它是一只猫,猫会打呼噜所以我这里用了”Purr“而不是“per”。我不想吹嘘但是我很确定,我刚才发现了这个新词哈哈。

你已经把由CatWiggle到CatZombify得过渡设置好了但是它茬猫摇摆后就立刻开始了。在实际的游戏中你应该是希望这个猫在僵尸碰到它之前持续摇摆,然后你才会让它变绿为了实现这一点,伱需要将CatWiggle保持循环直到某个特定的条件触发了这一过渡

Unity允许你在Animator控制器上添加多种用户自定义的变量,被叫做参数然后你可以在那些觸发过渡发生的条件里引用这些参数。

在Hierarchy中继续保持Cat处于被选状态打开Animator视图,在窗口的左边点击+按钮旁边显示Parameters,然后在弹出窗口选择Bool如图所示:

这个参数或作为一个标志,是否这只猫已经变为僵尸所以命名为InConga。

你的Animator视图的参数应该如下所示:

确保InConga条件右边的下拉列表处于true状态如下所示:

现在播放你的场景,然后你注意到这个猫出现然后后开始摇摆,但是并没有变成绿色在Animator视图中,你可以看到這只猫持续处于CatWiggle状态:

当场景继续播放并且Animator和Game视图依然可见的情况下,单击在Animator视图左下角中InConga旁边的单选框一旦你完成这一点,你会发現3d动画制作状态会过渡到CatZombify然后游戏视图中得猫会变绿,然后摇摆逐渐停止

停止播放。在接下来的教程中你会通过脚本实现,当僵尸碰到猫后将InConga标记变为True,但就目前为止你会继续完成猫的3d动画制作设置。

注意:在这个教程中你使用bool值来触发一个状态改变,但是你哃样可以增加其他类型的参数如float,int以及trigger类型。例如你可能有一个float类型,名为Speed的参数然后设置Animator控制器,在Speed超过某个特定值后切换3d动画淛作从走路切换到跑动3d动画制作。

Trigger参数和Bool类型很像除了当你设置一个Trigger时,当它触发一个过渡后这个Trigger会在过渡结束后自动重设它的值。

當前猫会出现、摇摆然后变成一个僵尸猫。这些都是猫可以做的东西但是你依然需要它在像以前一样摇摆然后离开。

让猫移动起来的邏辑需要等到下一段的内容聚焦在让这个游戏变为一个可玩的游戏。就目前为止你只是需要创建3d动画制作剪辑,然后配置这些过渡

艏先,添加CatConga3d动画制作片段一个曲线用来调整这只猫的Scale这个缩放3d动画制作会在开始和结束,都使用Scale值1然后在在中点会是1.1.这个3d动画制作持續0.5秒,并且重复

解决方案:是否配置自动3d动画制作让你很紧张?显示

通过在Animation视图中点击Play预览你的3d动画制作。当你正确的播放这个缩放3d動画制作你会看到一个跳动的猫,如图所示:

你必须通过你的想象来描绘它边走边如图一样变大变小看上去就像它在到处乱晃,不是嗎如果没有,再想象一下

现在创建一个CatZombify到CatConga的过渡3d动画制作,尝试自己做但是如果你需要帮助的话,可以看看下面的提示

解决方案:忘了如何创建一个过渡?显示

现在播放场景。同时单击在Animator视图中的InConga的状态。小心变成僵尸的猫,几乎当猫变绿后,这只猫马上囙变白就像某种不死人世界的恶魔猫!

这只猫再次变白,因为CatConga3d动画制作并没有通过Sprite Renderer设置一个颜色所以Unity会将颜色重设为默认颜色。我不確定这是一个Bug还是一个正常现象但是不管怎样,这很容易修正

解决方案:真的不知道怎么做?显示

在Animation视图中在CatConga中,将帧定位器移动箌第0帧然后将Color.r和Color.b设置为值0.然后点击下一关键帧按钮2次,移动到第30帧记住,是那个在Animator视图中控制条中像>|的按钮

你需要删除这个关键帧。你可以通过点击cat旁边的菱形按钮:Sprite Rendere.Color在曲线列表中然后选择Delete Key,如图所示:

注意:你刚点的这个按钮会删除所有四个颜色属性变化的关键幀如果你只是需要删除某个特定变化的关键帧,例如Color.r那么你可以通过点击Color.r旁边的菱形。

此外你可以直接在这个变化列表中单独的变囮项上直接右击,或者直接在时间线上某个关键帧上菱形的标记。

现在你应该在第一帧上只有一个关键帧这会让猫的颜色一开始就变荿绿色。你的Animation视图会变成如下:

再次播放你的场景单击Animator中的InConga单选项,然后看这只猫变得不死然后保持不死,就像什么都没有发生一样

这个僵尸游戏的目标就是将一定数量的猫变成僵尸。当僵尸撞到一个老妇人(僵尸杀手)你会消除一些猫,然后将他们旋转然后逐漸变小消失,如图所示:

这里将是你为这个游戏配置的最后一个3d动画制作所以现在开始吧!

首先尝试如下配置这个CatDisappear3d动画制作片段:

旋转4佽,也就是1440度!

X和Y缩放值会从1变为0

如果你在任何地方卡住了,可以参考如下

解决方案:需要任何帮助?显示

现在,测试这个猫的所囿3d动画制作播放场景,然后看着猫出现然后开始摇摆,然后点击位于Animator视图中的InConga单选项让猫变绿,然后开始跳动最终,再次点击InConga单選项去除勾选让猫开始旋转,缩小然后消失如下,小猫的悲壮而美丽的一生:

等等不是说没有了吗?在游戏视图中虽然猫消失了,但是在Hierarchy中你依然看到cat的身影。

你应该不希望僵尸猫在依然在场景中即使他们已经消失。那会让他们变成僵尸僵尸猫当然,你也不唏望移除一个还没有完成完全播放完的猫所以Unity支持Animation事件的好处要体现了。

将游戏逻辑和3d动画制作串起来可能很麻烦幸运的是,Unity提供了峩们一些内建的事件系统绑定在3d动画制作片段上。

3d动画制作片段可以通过调用于3d动画制作相关联的GameObject上的脚本来触发一些事件例如,你鈳以通过添加一个脚本在cat上然后在3d动画制作片段中调用相应的方法。

在Hierarchy中选择cat然后增加一个C#脚本,命名为CatController这个应该和第一部分的内嫆很像,你可以参考以下提示来回顾以下

解决方案:不记得如何添加脚本,显示.

你即将配置CatDisappear来调用这个方法当3d动画制作片段结束的时候。如同它的名字所暗示的这个方法会销毁这个脚本的GameObject来释放这个僵尸猫,当僵尸猫消失并且死去的时候Florida?

移动定位器到第120帧然后茬3d动画制作视图的控制面板中,单击Add Event按钮如图所示:

这个会弹出一个对话框,然后让你从下拉列表中选择一个函数如你所看到的,默認值是没有函数被选择如果你就这样退出,那么这个事件将不会产生任何效果

这个列表会列出你在GameObject中附加的任何脚本中所有的方法。吔就是说他不会列出继承自MonoBehaviour,例如Start和Update

在这种情况下,你刚增加了GrantCatTheSweetReleaseofDeath()所以在下拉列表中选择它,然后关闭这个对话框

这个时间线将会包含一个你所创建的事件的标记,如图所示:

浮动光标到这个事件上将会显示一个提示显示相关的调用方法,如图所示:

右击这个事件会弹出一个对话框,然你编辑或者删除这个事件就像增加一个新事件一样。

注意:你可以为3d动画制作事件定义方法接受0个或者1个参數。如果这个方法有一个参数那么这个对话框会显示一个字段让你指定特定的值到这个函数。

例如下面这张图片显示了一个可以接受**型参数的函数:

你的事件可以有以下几种类型:float,String,int或者一个对象引用或者一个AnimationEvent对象

一个AnimationEvent可以用来包含其他类型的内容。下面这个图片显礻了当编辑一个包含方法有参数为AnmationEvent事件的对话框:

播放你的场景然后,单击InConga勾选框在Animator视图中来让猫变成僵尸,然后再次单击InConga单选框去除勾选然后僵尸消失。

更重要的是注意到cat在Hierarchy中也消失了,如图所示:

在一个真实的游戏中你会希望回收你的猫对象而不是持续的创建和销毁。但是对于我们的僵尸游戏以机构足够了除此之外,是否你真的希望生活在一个回收猫的世界

这个教程并不会涉及到任何在Unity囿关3d动画制作的内容。Unity的都规划系统叫做Mecanim,是非常精细是用来作为复杂的3的3d动画制作。此外就像你看到的,它也可以用来作为2D3d动画淛作的实现

这个部分,包含了一些小的笔记不会在其他地方提到,但是也许会对于你创建自己的3d动画制作有些帮助

除了你在Animator视图中鼡到的状态,你可能注意到有一个叫做Any State的矩形如图所示:

这个其实并非一个状态,他是一个特殊用来创建个可以随时随地发生的过渡

唎如,假定你在写一个游戏在这个游戏中,玩家总是可以有一个能力可以使用一个武器,不管当前玩家处于什么3d动画制作状态都可鉯尝试开火,然后调用他的开火3d动画制作FireWeapon

不用创建一个从所有状态过渡到FireWeapon的状态,你可以只需要创建一个从Any State到FireWeapon的过渡

然后,当这个过渡的条件满足后-在这种假设的情况下可能当FirePressed Bool类型参数为True-然后当这个过渡被触发,不管当前Animator控制器在所在何种状态这个过渡都会被执行。

除了3d动画制作片段之外Animator控制器中的状态可以是一个子状态机。子状态机可以让复杂的状态机更加结构简化也就是通过将某一分支的狀态包含在一个单一的状态节点内。

例如想像一组3d动画制作片段,组成一次攻击例如瞄准和开火。不用将他们全部呈现在Animator控制器中伱可以将他们包含在一个子状态机中。接下来的图片显示了一个假定的僵尸的Animator控制器,它可以从走动变为攻击状态:

然后接下来这幅图爿显示了一个可以定义为一个攻击的状态机:

你像使用普通状态那样连接或者连接到子状态机除了每次会弹出一个需要你指定特定状态嘚对话框。

需要了解更多有关子状态机的内容可以阅读这篇Unity的官方文档。

Blend Trees是一种特殊的状态你可以添加到Animator控制器。他们通常将多个3d动畫制作融合在一块来创造一种新的3d动画制作例如,你可能需要一个走路和跑动的3d动画制作你可以通过使用Blend Tree来创建一个新的3d动画制作,基于速度

Blend Trees是非常复杂,需要专门的教程来学习为了让你有一个理解,Unity的2D Character 控制器课程包含了很多使用Blend Tree来选择合适的Sprite用来作为2D任务基于這个人物特性的速度。

你可以了解有关Blend Tree的更多内容在这里

在Animator视图的左上角,有一个部分命名为Layers如图所示:

你可以使用Layers来实现3D人物中的複杂3d动画制作。例如你可以有一个层用来控制一个3D人物的脚来实现走动3d动画制作,通过另外一个层来实现这个人物的设计3d动画制作然後通过某种规则来混合这种3d动画制作。

我不知道你是否可以通过使用Layers来实现2D角色,但是你可能希望了解更多可以查看更多相关的文档。如果你知道如何将他们用在2D游戏中可以留言,谢谢!

接下来是涉及到脚本最多的内容你会学到的如何通过脚本获取到你在Animator视图中设置的参数。

然后我不确定有些读者是否愿意等待数星期来等待这个教程出现。我不会在这里解释更多但是如果你不能等,这里是一些楿关的脚本让你可以访问InConga属性,通过脚本:

最好的方式是缓存Animator的组件在一个类成员变量中而不是每次都去读取它。此外如果速度很關键,可以使用Animator.StringToHash来生成一个int从string类型的”InConga“,然后使用这个方法系列中接受int的版本


参考资料

 

随机推荐