东部三维网 proe教程 查看内容

使用虚幻引擎4可视化记录器

2019-09-21| 发布者: www.d83w.com | 查看: 1463|原作者: 东部三维网

摘要:有一类游戏错误难以通过用户报告进行跟踪。这种类型的缺陷通常涉及复杂的步骤,其可能涉及基于当前游戏状态

有一类游戏错误难以通过用户报告进行跟踪。这种类型的缺陷通常涉及复杂的步骤,其可能涉及基于当前游戏状态的AI做出决定。当用户报告此类问题时,他们只能报告可以观察到的结果。这使得跟踪与游戏状态相关的问题变得非常困难。

虚幻引擎4有一个可以在这方面使用的工具;我们称之为Visual

记录器(Visual Recorder)。核心类似于您之前看到的许多日记系统,捕获当前正在记录的actor的状态,然后在完成该事实时在游戏或编辑器中直观地显示该状态。这是一个功能强大的工具,可让您在发生问题时查看游戏状态,同时还提供用户报告。

通过查看该数据,您可以将您期望发生的数据与基础代码进行比较。

要查看正在运行的Visual

Logger(Visual logger),请使用“Window | Developer Tools | Visual Logger”菜单。在4.7版之前,使用控制台命令“VisLog”。这是StrategyGame中的一个会话。

第一个图像显示可视记录器,第二个图像是编辑器中的视口。请注意,有一条紫色线代表所选AI的路径,并且在时间线上的选定点处有一个红色位置指示器。

一个正在运行的可视记录器。

编辑器中的级别视口,显示显示信息的可视记录器。

下图中突出显示的区域显示了在录制过程中将其信息记录在录像机中的演员列表。

还有一个搜索栏,可以按姓名快速查找参与者的日志信息。

演员列表和搜索选项。

下一张图片将突出显示时间线视图。此图片中的拖动块位于23.53秒标记处。战略控制者1被选中,所以当时其他区域的任何信息都属于演员。彩色水平条是记录的事件。时间条可以前后拖动,以便使用特定快照即时更新其他区域。

<> > >

时间线区域

在下面图像左下角的突出显示部分,可视化记录器显示该参与者的任何快照数据,这些数据可以在时间轴上的指定时间捕获。该数据在每个给定帧中捕获一次,参与者使用ue_vlog()宏请求一个可视日志条目。同一帧中的多个可视记录调用对该帧重用相同的数据。作为快照的一部分捕获的数据可以分类并为您的游戏定制(下面提供了一个代码示例)。

自定义类别的扩展演员快照区域

下图中突出显示的区域包围了录像机的记录区域。它显示由日志写入的类别和日志信息本身。

如果每帧有多条日志消息,它们将显示为该区域中的列表。

显示信息的日志区域

现在您已了解视觉记录器的主要区域,让我们看看如何在游戏中添加对它的支持。

在下图中,使用名为GDC的第一人称模板创建了一个新项目,以便在游戏开发者大会上进行演示。已将一个函数添加到Actor的捕获状态信息中,并添加了UE_VLOG()宏调用以触发记录器的捕获。

带有样本数据的可视记录器

为了填充工具的快照区域,您需要覆盖虚拟函数GrabDebugSnapshot()。此函数作为Actor的一部分实现,因此如果您不想提供自定义信息,则可以跳过此步骤。

可以根据编译设置编译可视记录器,因此必须使用适当的头文件包装该函数。以下是需要添加到GDCCharacter.h文件以添加快照支持:

的代码

的#if

ENABLE_VISUAL_LOG

虚拟void GrabDebugSnapshot(FVisualLogEntry * Snapshot)const覆盖;

#ENDIF

有关此方法的实现,请参阅以下内容,添加类别并将项目添加到该类别。

同样,该方法封装在#ifdef中,以防止版本化编译视觉记录器支持。此代码已添加到GDCCharacter.cpp中。

的#if

ENABLE_VISUAL_LOG

空隙

AGDCCharacter: GrabDebugSnapshot(FVisual LogEntry * Snapshot)

{

超级: GrabDebugSnapshot(快照);

Const int32 CatIndex=快照 - &gt;状态。 AddZeroed();

FVisual日志状态类别&amp;可放置类别=快照 - &gt;状态[CatIndex];

可分类别。 Category=TEXT('GDC Sample');

可分类别。添加(TEXT('Projectile Class'),Projectile Class

!=nullptr? ProjectileClass - &gt; GetName(): TEXT('None');

}

#ENDIF

仅当Actor登录到可视记录器时才调用此函数。

出于演示目的,记录射弹,以便可以轻松触发并添加到第一人称模板代码中。在下面的OnFire()函数中,请注意UE_VLOG()宏的应用程序。这就是告诉视觉记录器如何捕获Actor数据的方法。

如前所述,当首次使用该宏时,视觉记录器将调用GrabDebugSnapshot()来收集在快照面板中显示所需的数据。

此宏的编译方式与其他UE_LOG()宏类似,因此不需要在#ifdef中显式封装。

空隙

AGDCCharacter: OnFire()

{

//尝试发射射弹

如果(Project ileClass!=NULL)

{

Const FRotator SpawnRotation=GetControlRotation();

//MuzzleOffset在相机空间中,因此将其转换为

世界空间在从角色位置偏移之前找到最终的

枪口位置

Const FVector SpawnLocation=GetActorLocation()+

产卵旋转。旋转矢量(枪偏移);

UWorld * const World=GetWorld();

如果(World!=NULL)

{

//在

炮口号

world->;生成者(项目ileclass,)

繁殖位置,繁殖旋转;

虚拟日志(this,logfpchar,verbose,)

text('从位置(%s)发射的射弹(%s),旋转(%s)'),

*项目类->;getname(),

*产卵地点。tostring(),

*产卵轮动。tostring();

}

}

//如果指定,请尝试播放声音

如果(火声!

{

UgamePlayStatics: PlaySound Atlocation(这个,FireSound,)

getActorLocation();

}

//如果指定,请尝试播放启动动画

如果(火焰动画!

{

//获取手臂网格的动画对象

uanimInstance*animInstance=mesh1p->;getanimInstance();

如果(动画实例!

{

动画实例->;蒙太奇播放(火焰动画,1.f);

}

}

}

不仅可以记录文本信息,还可以记录以前在trategygame检查点视图中看到的可视图形信息。这是一个强大的功能,因为它可以帮助您可视化当前的游戏状态。

以下图片显示了可以可视化记录的不同形状类型。

路径信息,圆柱体,椎体,囊体,盒形。

以下宏支持录制形状。



友情链接:

版权所有© 东部三维网 | 备案: 皖ICP备11016851号-1 | www.d83w.com . All Rights Reserved | 网站地图