游戏过场动画制作

发表于2016-05-21
评论0 5.9k浏览

前言

    无论端游、手游、主机游戏,游戏内的过场动画都是必不可少的,它能强游戏代入感,缓解玩家关卡疲劳度。提升游戏Bigger,接下来我们就简单介绍一款Unity3D引擎里如何简单又快捷的做出比较绚丽的过场动画。先上几个例子:如有什么不明白的,直接私信我吧。




 

插件名称

uSequencer Cutscene and Cinematic creator

官网下载地址:

https://www.assetstore.unity3d.com/en/#!/content/14572

 


插件功能

    此插件的作者的初衷是为了做过场动画,以时间轴为主线,在不同的事件表现出不同的摄像机效果。它可以控制多个摄像机切换、单个摄像机的所有参数、控制动画系统、粒子系统、音效、创建销毁PrefabsAttach物体、打印Debug、灯光参数、GameObject参数、物理、改变整体游戏运行时间TimeScale、渲染、改变材质球、切换材质球等。

 

插件原理

    和传统非编软件一样,过场动画总有一个时间轴的概念,有个总导演摄像机的概念、由演员的概念。我们可以简单的认为,你就是导演、给你一个面板,你去叫演员组、摄像组、音效组、特效组、按照特定的时间去做自己的事情。

 

详细操作

导入插件到工程(不要把文件存在中文目录下)

    

 

1、创建一个摄像机Actor轨道

       Ctrl+ U 打开面板

       点击左上角Creat New Sequence

 

    

 

 

    此时你在层级面板会看到一个Sequence的一个Object,我们可以理解为,这个Obj就是一个过场动画组,我们把它做成一个Prefab.(不要通过Unity手动拖拽的形式去创建Prefab,通过面板上的CreatePrefab去创建预设)PS:估计是这个插件的在手动预设的时候会丢失好多东西,所以最好通过面板上去创建。

    这样程序就可以根据关卡中的需求来创建这个过场动画预设了。

 

3、了解导演轨道

如图所示,我们看到CamerCuts轨道,这个轨道我们可以理解为,多个摄像机之间的切换,毕竟我们同一时间只能看到一个同类型渲染摄像机的轨道(非混合渲染模式摄像机的情况下),说白了,就是在你过场动画的时间轴上,什么时候需要出现什么摄像机,你去做一个切换就行了。

 

4、根据面板合理命名你需要控制的演员组:摄像机组、特效组、音效组、角色组

我们简答的把游戏对象分为摄像机组、特效组、音效组、角色组


摄像机组的控制

    摄像机组能控制的参数很少,主要的麻烦值怎样把摄像机的轨迹动画和实际过场中的角色、特效、音效结合起来。

    关于摄像机的轨迹控制我们可以分为两类:简单的Animation动画控制 和 工具提供的动画帧控制组件


简单动画控制组件方式:

    摄像机创建一个轨道,通过PlayAnimation命令来控制摄像机轨迹播放,具体的摄像机轨迹的操作就得通过Unity3D引擎自己的动画系统来控制制作动画了,这点比较麻烦,因为工具提供的时间轴单位和Unity3D的动画系统时间轴的单位不是一个!这样我们就需要一个换算关系表来大概匹配一下事件了,然后在调节你想要的效果,毕竟用这种动画控制来控制摄像机轨迹,比较牢靠,稳定!

  首先我们来说一下,

   

动画类型的选择

    我们既然用传统的Animation来控制摄像机轨迹,就不能用Unity3D动画编辑器来创建动画文件了,需要从其他地方复制一个Length类型的动画,然后在拖拽到摄像机上去控制去做动画。建议最好不用Animator的动画文件。

    其次介绍一下,

    

时间换算关系的对应:



Unity5.0+版 把这个值设置成30 帧,就可以和动画工具匹配起来了。时间轴都是用秒数来控制。

 
工具提供的 动画帧控制组件

    这个我用了一下感觉很难用,如果想尝试的小伙伴,可以尝试一下,这个是作者自己写了一个编辑 器,原理和官方的一样。

截图如下:


    

 

 1、特效组的控制:

    其实,我们知道特效嘛,简单的分为两类,一个是场景特效,一个是角色特效,场景特效我们可以通过控制特效的显隐来实现特效在你的过场动画中出现的时机。就可以用这两个组件来控制特效的显示和隐藏

    另一个就是角色特效,我们通过StartEmitterStopEmitter来控制特效的显隐(次命令对于控制循环类特效颇为方便),当然只播放一次的角色特效就只需要控制Start就可以了,因为他们会自己停止播放,就不需要加StopEmitter命令了。


 

 

2、音效组的控制


        

  

    音效控制很简单不过也有很多方法

    直接PlayAudio是一种方法(实测效率低)

    创建一个空的预设,预设上挂一个AudioSrouce也行(效率高,然后挂上一个自销毁脚本)。

using UnityEngine;

using System.Collections;

public class TimedDestoryLocal : MonoBehaviour {

    public float time;

    void Start () {

        Destroy(gameObject, time);

    }

}

    其实最关键的是要把音效组,特效组一一对应起来,根据时间轴。

 

3、角色组的控制



    角色无非就是动画,把角色的动画类型改成Length类型,如果你的工程里的程序用的是animator的,那就需要新复制一个文件作为你过场动画的源文件。尽量不要动实际游戏里的源文件。

这样,接下来的事情就是对时间轴了。

 

4、添加自动播放脚本



    当我们的过场动画制作完成的时候,最终是以一个预设的形式存在于工程的,在关卡配置中,根据策划需求触发Trigger或者其他事件来创建这段过场动画,对于程序来说,他们只是克隆了一个预设,怎么让这个过场动画自动播放然后销毁,我们需要挂作者提供的一个脚本 Auto Play Sequence,很明显就是控制过场动画自动播放的脚本,两个变量,一个目标过场动画,一个是延迟时间,Delay 一般我都填0. 接下来我们还需要 挂上那个 TimedDestoryLocal 的脚本,来销毁这段过场。这样就和关卡衔接起来了。

 

5、过场动画内UI或者其他字幕的制作



    很显然用系统自带的UGUI最简单快捷,很简单,很笨拙,毕竟既然是字幕就得对应时间轴,想想你要是翻译一个电影字幕不也得去一句一句翻译么,过场动画中的字幕我们就得一句一句对应,如图,创建销毁,用Toggle Component 组件实时控制 多个Lable的显隐,这是一种笨方法;还有一种方法是让程序提供一个脚本,直接在时间轴上更新 UGUI Label 的字符串,编辑文字即可!   

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引