|
上一步
下一步
编程指南主页
在 Content Browser(内容浏览器) 中,我们会基于项目的 Game Mode(游戏模式) 来添加一个 Blueprint Class(蓝图类) 。 这样我们就可以对这两个类的变量设置任意值了。 我们可以这样操作:
点击 Content Browser(内容浏览器) 上的 Add(添加) 按钮。
选取HowTo_UMGGameMode为父类。 它位于"All Classes"(所有类)部分的列表中。
将运算结果的 Blueprint(蓝图) 资源命名为"MenuGameMode"。
为了能看到游戏中的鼠标指针,我们需要创建 Player Controller(玩家控制器) 的 Blueprint(蓝图) ,正如我们使用 Game Mode(游戏模式) 所操作的那样。
再次点击 Content Browser(内容浏览器) 上的 Add(添加) 按钮。
选择"Common Classes"(常见类)部分的 Player Controller(玩家控制器) 。
将 Blueprint(蓝图) 命名为"MenuPlayerController"。
编辑"MenuPlayerController"。
勾选"Show Mouse Cursor"(显示鼠标指针)框体。
编辑"MenuGameMode"。
起始的控件类必须被设置为"MainMenu"资源,从而在游戏开始时弹出菜单。
默认Pawn类应该被设置为 Pawn 而不是 DefaultPawn ,这样玩家在处于菜单中时将无法到处移动。
玩家控制器类应被设置为我们创建的"MenuPlayerController"资源,这样在游戏中将可以显示鼠标指针。
为了使用 Blueprint(蓝图) ,我们必须返回 Level Editor(关卡编辑器) 窗口并通过 Settings(设置) 按钮来变更我们当前 Level(关卡) 的 World Settings(世界设置) 。
我们也可以在 Project Settings(项目设置) 菜单中设置默认的 Game Mode(游戏模式) ,它位于 Maps and Modes(地图和模式) 部分。 如果您使用这种方式来设置,除非进行单独覆盖,否则您所有的关卡都会被默认设置为您选择的 游戏模式 。 您采用哪种方式,取决于您希望如何设置自己的项目。
此时将会打开 World Settings Panel(世界设置面板) 。 默认情况下,它会和 Details Panel(详细信息面板) 一起驻留,但可以被移动到其它位置。 我们需要设置Game Mode Override(游戏模式覆盖)域为"MenuGameMode"资源。
我们自定义的 Game Mode(游戏模式) 资源现在在关卡中生效了,配置为载入主菜单,并使用显示鼠标指针的 Player Controller(玩家控制器) 。 如果我们现在就运行游戏,Quit(退出)按钮会和我们预期一样运行,而点击New Game(新建游戏)按钮会让我们进入空白的菜单屏幕。 接下来我们要设置New Game(新建游戏)菜单。
完成的代码
HowTo_UMG.Build.cs
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.using UnrealBuildTool;public class HowTo_UMG : ModuleRules{ public HowTo_UMG(TargetInfo Target) {
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG" });
//PrivateDependencyModuleNames.AddRange(new string[] { });
// 如果您正在使用Slate UI则取消注释
PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
// 如果您正在使用在线功能则取消注释
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
// if ((Target.Platform == UnrealTargetPlatform.Win32) || (Target.Platform == UnrealTargetPlatform.Win64))
// {
// if (UEBuildConfiguration.bCompileSteamOSS == true)
// {
//
DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");
// }
// } }}
HowTo_UMGGameMode.h
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.#pragma once#include "Blueprint/UserWidget.h"#include "GameFramework/GameMode.h"#include "HowTo_UMGGameMode.generated.h"/** * */UCLASS()class HOWTO_UMG_API AHowTo_UMGGameMode : public AGameMode{ GENERATED_BODY()public: /** 在游戏开始时调用。 */ virtual void BeginPlay() override; /** 移除当前菜单控件并且如果可能,从指定类中创建新控件。 */ UFUNCTION(BlueprintCallable, Category = "UMG Game") void ChangeMenuWidget(TSubclassOfUUserWidget NewWidgetClass);protected: /** 在游戏开始时我们将作为菜单使用的控件类。 */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UMG Game") TSubclassOfUUserWidget StartingWidgetClass; /** 用作为菜单的控件实例。 */ UPROPERTY() UUserWidget* CurrentWidget;};
HowTo_UMGGameMode.cpp
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.#include "HowTo_UMG.h"#include "HowTo_UMGGameMode.h"void AHowTo_UMGGameMode::BeginPlay(){ Super::BeginPlay(); ChangeMenuWidget(StartingWidgetClass);}void AHowTo_UMGGameMode::ChangeMenuWidget(TSubclassOfUUserWidget NewWidgetClass){ if (CurrentWidget != nullptr) {
CurrentWidget-RemoveFromViewport();
CurrentWidget = nullptr; } if (NewWidgetClass != nullptr) {
CurrentWidget = CreateWidgetUUserWidget(GetWorld(), NewWidgetClass);
if (CurrentWidget != nullptr)
{
CurrentWidget-AddToViewport();
} }}
上一步
下一步
编程指南主页
|
|