UE4+C++开发-(六十一)-UI管理器第5篇(场景 3:在玩家控制器内部调用)-UI管理器,怎么调用,打开另一个UMG界面?

在玩家控制器内部调用UMGManager打开新界面是最直接的方式,适合在初始化、定时器事件触发或定时任务中加载 UI。以下是具体实现示例:

场景说明

假设在游戏中满足某个条件(如玩家得分达到 100 分、游戏时间到等)时,自动打开一个奖励界面(WBP_RewardUI)。我们在玩家控制器内部检测这个条件,并调用UMGManager打开界面。

实现代码

XXXPlayerController.cpp中添加以下代码(可以直接集成到现有代码中):

// 头文件(XXXPlayerController.h)中添加声明
public:
    // 模拟条件触发(如得分达标)
    UFUNCTION()
    void CheckConditionAndOpenRewardUI();

    // 记录玩家分数(示例变量)
    UPROPERTY(VisibleAnywhere, Category = "GameState")
    int32 PlayerScore;
// 实现文件(XXXPlayerController.cpp)中添加实现
void AXXXPlayerController::BeginPlay()
{
    Super::BeginPlay();

    // 初始化代码(已有)
    UMGManager = NewObject<UUMGManager>();
    if (UMGManager)
    {
        UMGManager->Initialize(this);
        // ... 现有加载初始UI的代码 ...
    }

    // 初始化玩家分数
    PlayerScore = 0;

    // 模拟每2秒检测一次条件(实际项目中根据需求触发)
    GetWorld()->GetTimerManager().SetTimer(
        TimerHandle_CheckCondition,  // 定时器句柄(需在头文件声明)
        this, 
        &AWUHAN719PlayerController::CheckConditionAndOpenRewardUI, 
        2.0f,  // 检测间隔(秒)
        true   // 循环检测
    );
}

// 检测条件并打开奖励界面
void AXXXPlayerController::CheckConditionAndOpenRewardUI()
{
    // 模拟得分增加(实际项目中由游戏逻辑更新)
    PlayerScore += 10;
    UE_LOG(LogTemp, Log, TEXT("当前分数: %d"), PlayerScore);

    // 当分数达到100分时,打开奖励界面
    if (PlayerScore >= 100 && UMGManager)
    {
        // 奖励界面路径(替换为你的实际路径)
        FString RewardUIPath = "/Game/UI/WBP_RewardUI.WBP_RewardUI_C";
        
        // 调用切换界面方法(关闭现有界面,只显示奖励界面)
        UUserWidget* RewardWidget = SwitchToWidget(RewardUIPath);
        
        if (RewardWidget)
        {
            UE_LOG(LogTemp, Log, TEXT("奖励界面打开成功!"));
            // 只触发一次,关闭定时器
            GetWorld()->GetTimerManager().ClearTimer(TimerHandle_CheckCondition);
        }
    }
}

// 头文件中补充定时器句柄声明
private:
FTimerHandle TimerHandle_CheckCondition; // 定时器句柄

关键说明

  1. 调用方式

    • 直接使用玩家控制器自身的UMGManager成员变量,无需额外获取。
    • 根据需求选择OpenNewWidget(叠加界面)或SwitchToWidget(切换界面)。
  2. 触发时机

    • 示例中使用定时器模拟周期性检测,实际项目中可在任何逻辑中触发(如碰撞事件、按键响应、网络回调等)。
    • 例如:在玩家拾取物品时调用OpenNewWidget显示提示界面。
  3. 路径格式

    • 确保RewardUIPath是正确的内部路径(右键 UMG 蓝图→复制引用),格式为/Game/.../蓝图名.蓝图名_C

优势

  • 无需跨类传递UMGManager引用,直接在玩家控制器内部完成调用。
  • 适合与游戏状态(如分数、任务进度)相关的 UI 逻辑,便于统一管理。

通过这种方式,你可以在玩家控制器内部灵活控制 UI 的显示时机,满足各种游戏逻辑需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值