浅谈游戏过场动画系统需求制作

发表于2017-03-20
评论0 4.9k浏览
  在游戏的剧情表达中,比较常见的会用到剧情过场动画。使用过场动画的游戏也是多不胜数,不管是3A大作还是webgame,对剧情有追求的都会引入过场动画这一系统,让玩家在纯文字对白之外能够有更为直观深入的体验,以帮助增强游戏的体验代入感。下面就让我们来谈谈游戏过场动画系统需求制作。

        过场动画又分为预渲染动画和实时动画。由于现代主机硬件已经强大到能够展现电影级的实时过场动画,加之相比于预渲染动画具有数据量小、制作周期短的特点,所以在现代游戏中得到广泛使用。
   这里,我们主要就聊一下游戏中实时动画的过场制作需求。

一 概述
  
   一般来说,游戏里的过场动画基本都是基于时间轴上触发的一系列的事件。玩家看到的所有内容都可以在一根时间轴上进行编辑和排列组合。这些事件是有次序的,同时也有可能会并行发生。这些事件策划会根据需求来进行细分,比如说常用的有:移动、播放指定动作、播放音乐、出现对白字幕、播放脚本等等。而所有事件的操作对象,会基于空对象、摄像机以及游戏物件NPC.
  具体可看下表:
   

事件类型

功能描述

对象

移动

沿指定路径点运动

摄像机/物件

动作播放

播放指定动作

物件

音乐播放

播放指定音乐

空对象

对白

头顶泡泡、聊天文字、字幕

物件、空对象

特殊效果

景深焦点变换、子弹事件FOV渐变、摄像机抖动

空对象摄像机

脚本

UI、扩展逻辑、触发器

空对象


二、制作

      当确实要制作游戏的过场动画系统的时候,策划首先要和程序确定数据的存储的方式,如果游戏引擎有成熟的编辑器则没有这一步,如果并没有编辑器可以使用,实现所见所得的话,那么一般就需要确定一个数据格式。这个主要需求要容易修改,同时容易扩展。
     策划可以使用excel表来进行编辑填写,数据最终存储为xml。

    存储格式参见下图:
           


三、播放

    播放的主要任务是随着时间轴的进行来处理理指定时间内的事件,其核心数据结构是由多个layer组成的链表数组。下面简化的伪代码展示了事件处理逻辑:

function Update(time , dt)

            finish = true

            for each layer in layers do

                            if event != null && time >event.endTime then

                                            event.stop()

                                            event = next event

                            end

                            if event != null && time >= event.startTime then

                                            event.play(dt)

                            end

                            if event != null then

                                            finish = false

                            end

            end

            if finish == true then

                            stopcutscene

            end

end

    除此之外,该系统还包括下列功能:

· XML文件解析以生成事件链表数组;

· 对象预加载和管理;

· 开播前处理,包括:游戏对象隐藏、UI隐藏、通知服务器、锁定玩家操作等;

· 播完后处理,包括:游戏对象恢复、UI恢复、通知服务器、解锁玩家操作、清理过场数据等等;


    作为策划而言,并不需要是写代码如何,更多的是需要和程序GG沟通,了解系统的实现会让沟通更有效率和帮助。

    对于过场动画整个系统编辑而言,个人看的更多的项目更多的是使用excel表进行脚本式的编辑,实际上在这些编辑中,更多的是一种伪代码的编写,即程序给出指定的命令,而策划则按照对于的格式来编写对于的过场动画脚本剧情。

    因此对策划而言,不仅事先要对剧情需要的所有事件有通盘的了解和规划,同时还要足够了解所有内容的代码形成过程,最后还要细心的编写,最后才能形成完整的一段过程动画。

    当然,纯粹的伪代码编写,并不可取,最后还是要尝试实现编辑器功能的界面化面积,以及要求程序提供辅助工具。



四、编辑系统及辅助工具

    下图为某项目的编辑界面,用于举例描述。

    编辑器界面,主要分为工具栏、对象列表、事件编辑区域、场景编辑区域、事件/对象编辑面板。它提供了所见即所得的过场动画编辑功能,方便对象位置和朝向定位、动作预览、路径规划、事件编辑。此外,整体或指定起始时间播放、单事件播放、暂停功能有助于提高制作人员调优的效率。在有限时间的开发周期内,我们重点做好以下核心功能:

· 事件编辑:创建、删除、修改、拖拽操作方式来排列事件、可拉伸的时长修改方式、复制/粘贴操作的支持;

· 对象编辑:创建、删除、修改、定位/旋转、批量复制、整体平移/旋转;

· 路径编辑:节点插入、删除、替换;

预览:保证与客户端一致的表现效果;

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