C++使用UMG接口
1.独立建立一个UMG的模块
当你新建一个C++工程后,假如你的名称是MyTest,那么按照下面这个路径MyTest\Source\MyTest,找到MyTest.Build.cs文件并打开
,因为我本机的VS2013有点问题,所以直接从VS打开会崩溃。所以我就直接在这个文件中进行修改
打开后,我们可以看到这是两行通过模块名称引用的代码,那么我们要使用UMG就必须要将他们修改成
2.扩展我们的游戏模式
我们要制作与UMG相关的内容必须要从User Widgets里面获取,所以我们要写一个函数来显示User Widgets,同时要在游戏运行的时候将其调用。我们同时需要跟踪这个User Widgets,这样可以确保我们不需要的时候可以直接去掉他。因为每一个工程都会自带一个自定义的GameMode,我们来简单的修改他
头文件中我们添加
virtual void BeginPlay() override;
/** 移出当前的菜单控件 同时创建一个新的控件 */
UFUNCTION(BlueprintCallable, Category = "UMG Game")
void ChangeMenuWidget(TSubclassOf<UUserWidget> NewWidgetClass);
protected:
/** 当游戏开始时我们创建这个控件 */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UMG Game")
TSubclassOf<UUserWidget> StartingWidgetClass;
/** 记录我们使用的当前控件 */
UPROPERTY()
UUserWidget* CurrentWidget;
源文件中
void ACountDown::BeginPlay()
{
Super::BeginPlay();
//打开我们的UMG控件
ChangeMenuWidget(StartingWidgetClass);
}
//改变菜单控件
void ACountDown::ChangeMenuWidget(TSubclassOf<UUserWidget> NewWidgetClass)
{
//如果当前的控件为空
if (CurrentWidget != nullptr)
{
//将当前的控件从当前视口移出
CurrentWidget->RemoveFromViewport();
CurrentWidget = nullptr;
}
//新建一个控件
if (NewWidgetClass != nullptr)
{
//当前的控件=新创建的
CurrentWidget = CreateWidget<UUserWidget>(GetWorld(), NewWidgetClass);
//如果不是空
if (CurrentWidget != nullptr)
{
//添加进入视口
CurrentWidget->AddToViewport();
}
}
}
3.编译我们的程序,打开UE4编辑器,我们创建一个UMG蓝图
打开后我们加入一个Button 和一个Text