返回

UE4游戏引擎自定义IMGUI界面布局及属性值显示

Android

IMGUI:打造灵活动态的UE4游戏界面

自定义IMGUI窗口布局

在游戏开发中,IMGUI(即时模式图形用户界面)闪亮登场,它赋予我们强大的能力,让我们得以在游戏中打造灵活多变、可随心定制的界面。IMGUI 通过 Begin() 函数轻松创建一个崭新的窗口,然后利用其丰富的函数库,诸如 Text() (添加文本)、Button() (添加按钮)、SliderFloat() (添加滑块),将形形色色的控件融入窗口之中。

此外,IMGUI 还提供了极为灵活的布局自定义功能,通过 SetWindowPos()SetWindowSize()SetWindowCollapsed() 等函数,窗口的位置、大小和折叠状态都尽在掌控。

在IMGUI窗口中显示属性值

IMGUI 不仅能创建界面,还能承载游戏对象的信息。Text() 函数可用于显示文本,DragFloat() 函数则能呈现可拖拽的浮点数,而 Checkbox() 函数则负责勾选框的展示。

想要获取游戏对象的属性值,不妨借助 UE4 中的 KismetSystemLibrary::GetPropertyValue() 函数。有了它的加持,指定游戏对象的指定属性值就能轻而易举地被获取。例如,以下代码片段便可获取游戏对象的位置:

FVector Location = KismetSystemLibrary::GetPropertyValue<FVector>(GameObject, "Location");

通过自定义IMGUI界面控制游戏对象的行为

IMGUI 的强大之处还在于它可以让你通过自定义界面来掌控游戏对象的行为。Button() 函数能轻松添加一个按钮,当玩家点击时,便可通过 UE4 的 KismetSystemLibrary::CallFunction() 函数调用游戏对象的某个特定函数。

举例来说,以下代码片段添加了一个按钮,一旦玩家点击,游戏对象便会移动到原点:

if (ImGui::Button("Move to Origin"))
{
    KismetSystemLibrary::CallFunction(GameObject, "SetActorLocation", FVector(0.0f, 0.0f, 0.0f));
}

示例

下面是一个通俗易懂的示例,它展示了如何在 UE4 游戏中利用 IMGUI 创建一个自定义界面,该界面包含了一个文本框、一个滑块和一个按钮:

#include "Kismet/KismetSystemLibrary.h"
#include "Runtime/UMG/Public/Blueprint/UserWidget.h"
#include "Runtime/UMG/Public/Components/Widget.h"

UCLASS()
class UIMGUI_EXAMPLE_WIDGET : public UUserWidget
{
    GENERATED_BODY()

public:
    UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
    FText TextValue;

    UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
    float SliderValue;

public:
    void NativeConstruct()
    {
        Super::NativeConstruct();

        // 创建 IMGUI 窗口
        ImGui::Begin("Example Window");

        // 添加文本框
        ImGui::Text("Text:");
        ImGui::InputText("##TextValue", &TextValue.GetCharArray()[0]);

        // 添加滑块
        ImGui::SliderFloat("Slider:", &SliderValue, 0.0f, 100.0f);

        // 添加按钮
        if (ImGui::Button("Button"))
        {
            // 获取游戏对象
            AActor* GameObject = GetWorld()->GetFirstPlayerController()->GetPawn();

            // 调用游戏对象函数
            KismetSystemLibrary::CallFunction(GameObject, "SetActorLocation", FVector(0.0f, 0.0f, 0.0f));
        }

        // 结束 IMGUI 窗口
        ImGui::End();
    }
};

总结

IMGUI 作为一款强有力的工具,赋予我们在游戏中打造自定义动态界面的能力。借助 IMGUI,我们可以轻松展示游戏对象信息,操控游戏对象行为,让游戏开发更上一层楼。

常见问题解答

  1. IMGUI 与传统的 HUD 有何区别?
    IMGUI 界面是动态可调的,而 HUD 通常是固定的。

  2. 如何自定义 IMGUI 窗口布局?
    使用 SetWindowPos()SetWindowSize()SetWindowCollapsed() 函数即可自定义窗口的位置、大小和折叠状态。

  3. 如何在 IMGUI 窗口中显示游戏对象属性?
    利用 Text()DragFloat()Checkbox() 等函数即可显示属性值。

  4. IMGUI 可以控制游戏对象的行为吗?
    是的,通过添加按钮并调用游戏对象函数,IMGUI 可以控制游戏对象的行为。

  5. IMGUI 与其他 GUI 库有何优势?
    IMGUI 以其轻量化和实时响应性而著称,特别适合在游戏中创建动态界面。