5593人加入学习
(18人评价)
【旧版】Unreal初级课程 - 3D吃豆人

旧版课程,制作完成于2018-03-29,基于Unreal 4.18

价格 免费

显示UI,需要继承HUD这个类:

创建基于PacManHUD的蓝图类

我们自定义的HUDFont需要指定字体:视图选项中 勾选 显示引擎内容,方可选择 RobotoDistanceField 字体。

修改完蓝图需要编辑保存

对 BP_PacManGameMode 的 HUD Class 指定成我们刚刚转化的 BP_PacManHUD 。

Canvas->SizeX / 2.0f , Canvas->SizeY / 2.0f 显示的文字不在正中间

PacManHUD.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/HUD.h"
#include "PacManHUD.generated.h"

/**
 * 
 */
UCLASS()
class PACMAN_API APacManHUD : public AHUD
{
	GENERATED_BODY()
public:
	// UFont 字体,显示的文字,字体,为了寻找字体方便,修改字体方便,一个蓝图类来继承它,在蓝图中修改字体
	// EditAnyWhere 在哪块都能修改
	// BlueprintReadWrite 表示可以在蓝图中修改这个属性/定义
	// Category 分类,分到HUDFont类中去
	UPROPERTY(EditAnyWhere,BlueprintReadWrite,Category=HUDFont)
	UFont* HUDFont;
	
	// 介绍一个函数,这个函数很重要,在屏幕上显示文字,靠这个函数来实现的
	// DrawHUD 就像 Tick 一样,每帧调用一次,这样把我输入的文字显示在屏幕上
	virtual void DrawHUD() override;
};

PacManHUD.cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "Public/PacManHUD.h"
#include "PacManGameModeBase.h"
#include "Kismet/GameplayStatics.h"
#include "Engine/Canvas.h"
#include "Public/PacManCharacter.h"

void APacManHUD::DrawHUD()
{
	// 获得当前的游戏模式
	class APacManGameModeBase* GameMode = Cast<APacManGameModeBase>(UGameplayStatics::GetGameMode(this));
	// 根据不同的状态,显示不同的文字
	switch (GameMode->GetCurrentState())
	{
	case EGameState::EMenu:
		// 显示文字的函数,
		// 第一个参数:需要显示的文字;
		// 第二个参数:文字的颜色;
		// 第三个参数:获得横的屏幕的宽度;
		// 第四个参数:获得纵的屏幕的长度
		// 第五个参数:显示的字体
		// (Canvas->SizeX/2.0f) 就是在屏幕中间
		// 使用 Canvas 需要引入头文件:#include "Engine/Canvas.h"
		// 向下,向右为正方向,为了移动正中心,进行了减法运算到屏幕中间
		DrawText(TEXT("Welcome To PacMan!\n\nN to start a new game \nP to pause the game"), FColor::White, (Canvas->SizeX / 2.0f) - 150.0f, (Canvas->SizeY / 2.0f) - 100.0f, HUDFont);
		break;
	case EGameState::EPlaying:
	{// 这个括号需要
		// 获得主角,0 表示第一个玩家,场景只有一个玩家
		APacManCharacter* PacMan = Cast<APacManCharacter>(UGameplayStatics::GetPlayerPawn(this, 0));
		if (PacMan)
		{
			// FString::FromInt() 将 int类型的变量转换成字符串
			FString LiveString = TEXT("Lives: ") + FString::FromInt(PacMan->Lives);
			DrawText(LiveString, FColor::Green, 50, 50, HUDFont);

			FString CollectablesToEatString = TEXT("CollectablesToEat: ") + FString::FromInt(PacMan->CollectablesToEat);
			DrawText(CollectablesToEatString, FColor::Green, Canvas->SizeX - 150, 50, HUDFont);
		}
	}// 这个括号需要
	break;
	case EGameState::EPause:
		DrawText(TEXT("P To Continue"), FColor::White, (Canvas->SizeX / 2.0f) - 150.0f, (Canvas->SizeY / 2.0f) - 100.0f, HUDFont);
		break;
	case EGameState::EWin:
		DrawText(TEXT("You Win!\n\n R for another"), FColor::White, (Canvas->SizeX / 2.0f) - 150.0f, (Canvas->SizeY / 2.0f) - 100.0f, HUDFont);
		break;
	case EGameState::EGameOver:
		DrawText(TEXT("CameOver!\n\nR for another"), FColor::White, (Canvas->SizeX / 2.0f) - 150.0f, (Canvas->SizeY / 2.0f) - 100.0f, HUDFont);
		break;
	default:
		break;
	}
}

PacManCharacter.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "PacManGameModeBase.h"
#include "PacManCharacter.generated.h"

UCLASS()
class PACMAN_API APacManCharacter : public ACharacter
{
// 改成了Public可供PacManHUD显示调用
public:	
	// 需要吃的 豆 的数量
	int CollectablesToEat;
	// 当前的生命值
	int Lives;
};

 

[展开全文]

UI显示文字提示玩家,主角当前还剩多少生命值,当前豆子数,玩家死之后提示之类

[展开全文]
林一 · 2018-04-29 · 28-UI显示 0

授课教师

SIKI学院老师

课程特色

图文(1)
下载资料(1)
视频(30)

学员动态