UDN
Search public documentation:

FullScreenMovieCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > Matinee & 过场动画 > 全屏动画 (FMV)
UE3 主页 > 过场动画制作人员 > 全屏动画 (FMV)

全屏动画 (FMV)


概述


在 UE3 中有两种动画回放的方法:使用一个带有材质的 MovieTexture(动画贴图)资源或使用 Fullscreen(全屏)动画播放器。在该文档中讨论全屏动画播放器的功能。

创建新的动画文件


请参阅 Rad Game Tools (http://radgametools.com/) 提供的文档,了解有关如何将动画转换为 Bink 格式的信息以及各种可用的编码选项。

播放动画文件


有几种方法可以打开动画文件进行回放。可以直接从磁盘动态载入,在第一次播放时预载到内存,或者可以使用由用户提供的已经加载动画流的内存。

您可以使用可执行命令 "MOVIETEST "任何使用动画文件的平台上测试动画回放。请注意该执行指定指令将阻塞游戏线程,直到返回之前完成请求的动画。

您也可以使用全局变量全屏动画播放器 (GFullScreenMovie) 从代码中回放一段动画。该全局变量及其函数应该只可以通过主要游戏线程进行访问。

GameThreadPlayMovie - 该函数用于从给定的文件名称中启动动画回放。可以使用下面的一种选项进行回放:

名称 描述
MM_LoopFromStream 磁盘中的流和循环,最小内存使用
MM_PlayOnceFromStream 磁盘中的流,最小内存使用
MM_LoopFromMemory 将动画加载到 RAM 并从那里开始循环
MM_PlayOnceFromMemory 将动画加载到 RAM 并播放一次
MM_LoopFromSuppliedMemory 从前面已加载的缓冲中循环
MM_PlayOnceFromSuppliedMemory 从前面已加载的缓冲中播放一次

如果您已经指定一个循环的动画,那么回放将从动画流中的第一帧重新开始,而且它会继续播放直到您停止动画。请注意在启动动画回放以后,您必须一直调用 GameThreadStopMovie。

GameThreadIsMoviePlaying - 该函数会检查给定的动画是否正在播放中。

GameThreadGetLastMovieName - 该函数会返回最后播放的新近推出的动画。

停止一段正在播放和阻塞的动画


GameThreadStopMovie - 在调用 GameThreadPlayMovie 之后,您必须一直调用该函数。这会停止当前正在播放的动画,同时还会删除为动画回放创建的视口。

GameThreadWaitForMovie - 调用该函数会使游戏线程拦截直到动画回放结束。请注意如果您在循环的动画上进行该操作,您将会永远阻塞。

GameThreadIsMovieFinished - 使用该函数,您可以查看动画是否仍然在渲染线程上播放。这允许您在回放发生时进行其他工作。

配置设置


提供了一些可以在您的 Game\Config\DefaultEngine.ini 文件中的 [全屏动画] 部分中设置的选项。

  • "+StartupMovies=MovieName" - 将 MovieName 添加到启动动画列表。启动动画会按顺序播放,直到整个序列播放完毕。启动序列可用于在游戏线程播放过程中隐藏发生在它们上的任何初始加载。这个列表中的最终动画将会保留作为循环动画,引擎启动需要多长时间,它就可以放多长时间。如果最终循环动画加载完成之前引擎在动画前面启动,那么将永远不会播放循环动画。
  • "+AlwaysLoadedMovies=MovieName" - 将 MovieName 添加到第一次回放后驻留在内存中的动画的列表。这通常应用于关卡过渡过程中总是需要的一段加载动画这种情况。
  • "+SkippableMovies=MovieName" - 将 MovieName 添加到可以跳过的动画的列表。跳过现象会在检测到特定按钮按下事件时或您手动尝试停止一段动画时发生。可以使用它在引擎启动完成后跳过一些动画(如果引擎仍然在启动中,那么将无法跳过动画)。
  • "+LoadMapMovies=MovieName" - 从加载阻截地图的过程中播放的 UGameEngine::LoadMap 的开头随机选择的动画的数组。
  • "bShouldStopMovieAtEndOfLoadMap" - 如果这一项为 TRUE,那么在阻截地图加载(通过 UGameEngine::LoadMap)完成的时候,引擎将会调用 StopMovie()。如果为 FALSE,那么您将需要手动停止正在播放的所有动画(如果您需要在 LoadMap 完成后做一些时间较长的处理工作,那么它会非常有用)。
  • "bForceNoMovies" - 如果这一项为 TRUE,那么将不会播放动画。

动画回放详情


所有动画回放都在渲染线程上进行。如果该渲染线程不存在或已经停止,那么全屏动画播放器将在动画回放 开始/结束.时手动 启动/停止 渲染线程。全屏动画播放器是在渲染线程上的可做记号对象,但是它只在打开和正在播放动画时才会做记号。

为动画回放创建一个新的视口,并在停止动画时将其销毁。为了合理地处理输入事件,需要进行这项操作。

在播放第一段动画时,创建被解码的内部 bink 贴图以及 YUV->RGB 转换着色器。这与应用于 MovieTexture(动画贴图)资源的回放实现过程相同。