gpt4 book ai didi

unreal-engine4 - 在虚幻引擎 4 的编辑器小部件中获取游戏状态

转载 作者:行者123 更新时间:2023-12-05 02:58:51 25 4
gpt4 key购买 nike

我有一个编辑器小部件,我在其中为某个按钮点击事件创建了一个蓝图。

不幸的是,当我使用“获取游戏状态”节点(或任何类似节点)时,它总是返回 null。

我明白这是正确的,但我没有在编辑器中点击 Play(没有游戏状态实例)。但是一旦我点击播放,当我点击编辑器小部件上的按钮时一切都一样 - 它返回 null。同时,游戏窗口内的常规小部件会返回游戏状态引用。

那么,假设游戏正在播放(我点击了“播放”按钮),如何在编辑器小部件中访问游戏状态(就像在普通小部件中一样)?

附注我正在研究简单的单人案例。

最佳答案

您必须有一个有效的 World Context 对象。

Get Game State 节点在 Editor Utility Widget 中使用时, World Context Object 引脚被暴露。

Get Game State node in a Widget Blueprint

在 Actor 蓝图中,World Context Object 仍然存在,但编辑器隐藏了引脚,因为它可以自动确定。

Get Game State node in an Actor Blueprint

World Context Object 是可以返回到 UWorld 对象的任何 UObject。在 Actor 蓝图的情况下,蓝图编辑器可以简单地使用该 actor 作为 World Context Object,方法是将该 actor 传递给 GetWorldFromContextObject。 .

另一方面,您的编辑器控件蓝图没有绑定(bind)到可用作世界上下文对象的对象的对象,因此您必须以某种方式提供一个对象。

使用从蓝图中选择的 Actor

这是一个示例,说明如何使用选定的 actor 作为 World Context Object 获取游戏状态。要使用此示例,请创建一个带有单个按钮的编辑器实用程序蓝图,并将下面的蓝图图表用作按钮单击处理程序。然后运行小部件,并在编辑器中启动播放,然后处理播放器(F8),选择场景中的任何 Actor ,然后单击按钮。您应该会看到记录的当前时间。

Using Get Game State in an Editor Utility Widget Blueprint

使用 C++

或者,您可以创建一个蓝图可调用 C++ 函数,它直接循环遍历引擎的世界并将最合适的世界返回给蓝图。

.h文件

UCLASS()
class MYPROJECT_API AMyProjectGameModeBase : public AGameModeBase
{
GENERATED_BODY()

public:

UFUNCTION(BlueprintCallable)
static UWorld* MyGetWorld();

};

.cpp 文件

#include "Engine/Engine.h"

UWorld* AMyProjectGameModeBase::MyGetWorld()
{
// Prefer PIE Worlds.
// Fallback to Game Preview Worlds.
// Ignore all other types (e.g., other preview worlds).

UWorld* PIE = nullptr;
UWorld* GamePreview = nullptr;

for (FWorldContext const& Context : GEngine->GetWorldContexts())
{
switch (Context.WorldType)
{
case EWorldType::PIE:
PIE = Context.World();
break;
case EWorldType::GamePreview:
GamePreview = Context.World();
break;
}
}

if (PIE)
{
return PIE;
}
else if (GamePreview)
{
return GamePreview;
}

return nullptr;
}

请注意,对于此示例,我将函数置于游戏模式下,这可能不是您将其组织放置的位置,但这只是为了演示,因为在创建新的 C++ 项目时会自动创建游戏模式 C++ 文件来自基本模板。

另请注意,您尝试做的事情有点粗略。编辑器实用程序旨在在编辑器的上下文中运行,它可以承受许多世界的加载。如果您希望能够按下与场景交互的按钮,您最好改为执行以下操作之一:

  • 使用 UMG 或 Slate 在游戏本身中放置一个调试按钮
  • 在游戏本身中创建控制台命令(可能需要 C++,我从未在蓝图中尝试过)
  • 如果这只是为了处理特定类型的转换,请为该 Actor 创建自定义详细信息面板(需要 C++)。

关于unreal-engine4 - 在虚幻引擎 4 的编辑器小部件中获取游戏状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58582638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com