虚幻引擎:触发音量

这是学生学习博客的第三部分。 第1部分第2部分

在上一篇文章中,我们介绍了如何使用C ++和TickComponent方法操作对象。 以这种方式控制对象可能非常有用,但是不允许玩家以非常有意义的方式与世界互动。 触发量是我们可以用来解决这一问题的统一对象之一。 在上一次的概念的基础上,我们将触发音量来创建自动门,当玩家靠近门时会自动打开,而当玩家离开门时会自动关闭。

首先,我们将在场景中放置一个门对象,就像我们上次使用岩石一样。

现在,如果需要,我们可以向其添加对撞机,但在此示例中,它并不是真正需要的。

现在,我们将添加一个门组件。 加载组件后,我们需要在标头中定义一些变量。

在此示例中,您会注意到的第一个更改之一是UPOPERTY(EditAnywhere),这是虚幻中的宏,它向虚幻编辑器公开变量,以便开发人员可以即时对其进行更改。 我将其包括在这里是因为它是一个方便的工具。您可以在编译后通过单击附加有门部件的对象并在详细信息选项卡中选择该部件来查看更改。

接下来是ATriggerVolume。 触发音量基本上是可以走路扔的对撞机。 尽管它们不会阻止其他对象通过它们,但它们可以告诉对象何时通过了它们,并能够验证哪个对象与它重叠。 我们将触发量显示给编辑器,以便我们可以创建一个压力板,玩家可以踩踏该板以打开门。 在编辑器中找到触发音量后,您可以将其像其他对象一样拖放到场景中。

与岩石演示类似,我们还定义了门的打开和关闭方法以及打开和关闭旋转的方式。

我们像往常一样获得所有者,但现在我们也得到了一个名为ActorThatOpens的AActor。 这将是唯一可以在进入“触发”音量时打开门的演员。

编译后,我们将在虚幻引擎中设置UPROPERTYS以满足我们的需求。 我们可以通过单击场景中的“体积触发器”并将其拖动到字段中来设置PressurePlate触发器体积,并且可以通过在“旋转”字段中键入打开的旋转来将其设置为-90。

现在我们已经定义了解决方案,我们可以开始实施该解决方案了。 从我们的构造函数开始。

非常简单,我们只需要在构造函数中获得所有者即可。

这次,我们将使用BeginPlay方法初始化一些变量。

我们需要在这里定义这些变量,因为某些对象(例如玩家pawn)在游戏开始之前不存在,并且如果在构造函数中调用会导致程序崩溃。

GetWorld()-> GetFirstPlayerController()-> GetPawn();

通过这行代码,我们从世界对象(我们的游戏世界)开始访问虚幻对象“自上而下”,然后我们访问用于播放器的控制器和与之相连的Pawn对象。 我们将使用ActorThatOpens来确保只能由玩家打开门。

就像在演员位置一样,我们也可以使演员旋转。 我们将获得开始旋转,并考虑将其关闭,然后将打开位置旋转作为基础。

现在我们来看看我们的打开和关闭方法。

使用get和set Actor Rotation方法,我们可以轻松设置打开位置和关闭位置的旋转角度。

最后,我们将使用滴答声组件来检测触发器何时与玩家演员重叠并相应地采取行动。

这个概念很简单,但非常有用。 PressurePlate-> IsOverlappingActor(ActorThatOpens)返回一个布尔值。 我们将此方法放在TickComponent中,以每帧检查其状态。 如果玩家与扳机音量重叠,我们将打开门;如果不在扳机上,我们将确保门已关闭。

现在,在编译之后,我们应该得到这个结果。

在这里,我们有它。

我希望您现在对触发音量及其如何用于控制我们的游戏有基本的了解。

谢谢阅读。