虚幻四C++入坑指南07:C++实现FPS游戏(1)
虚幻引擎4文档 > 编程指南 > C++ 编程教程 > 第一人称射击游戏教程
01 QuickStartGameModeBase
01 01 新建项目
第一人称、不带初学者内容、项目名:FPSProject
01 02 QuickStartGameModeBase.h
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "QuickStartGameModeBase.generated.h"
/**
*
*/
UCLASS()
class QUICKSTART_API AQuickStartGameModeBase : public AGameModeBase
{
GENERATED_BODY()
//gw不加,C++默认private,加上整洁
private:
virtual void StartPlay()override;
};
01 03 QuickStartGameModeBase.cpp
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#include "QuickStartGameModeBase.h"//必须first
#include "QuickStart.h"
#include "Engine/Engine.h"//官网没加,没加报错
//欠了个A
void AQuickStartGameModeBase::StartPlay()
{
Super::StartPlay();//这段不加,下面的代码没效果
//-1,无需更新刷新信息
//#include "Engine/Engine.h"
if (GEngine)
{
// 显示调试信息五秒。
// -1"键"值(首个参数)说明我们无需更新或刷新此消息。
//(-1无序更新刷新此消息,5.0f在屏幕上显示的时间,颜色,内容TEXT文本本地化,字符编码的问题)
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World, this is FPSGameMode!"));
}
}
01 04 生成
版本升级后,GameMode->GameBaseMode
VS中的GameModeBase文件 == UE4中的“手柄”
02
02 01 新建文件夹Content\Maps,保存当前空白地图为FPSMap(对本次演示没什么用)
02 01 FPSMap设置为项目启动地图(对本次演示没什么用)
02 03 设置游戏模式
03 演示(黄字5秒后消失)
05 bug
05 01 bug 我的是GameMode(而且还是跟官网不同的GameMode,怀疑人生)而不是GameModeBase,这不是bug,这是事实
05 02 bug 报错 欠了个A
方法1 (无效,这是全局文件,独一份)
D:\Data\Projects\Unreal\QuickStart\Intermediate\Build\Win64\UE4Editor\Inc\QuickStart(试着从下图复制一份到这里)
D:\Data\Projects\Unreal\QuickStart\Source\QuickStart
.cpp欠A,很低级,但也记录
//欠了个A
void AQuickStartGameModeBase::StartPlay()
06 各方代码
06 01 官网
06 01 01 .h
// 在 Project Settings 的 Description 页面填入版权声明。
#pragma once
#include "GameFramework/GameModeBase.h"
#include "FPSProjectGameMode.generated.h"
/**
*
*/
UCLASS()
class FPSPROJECT_API AFPSProjectGameMode : public AGameModeBase
{
GENERATED_BODY()
virtual void StartPlay() override;
};
06 01 02 .cpp
// 在 Project Settings 的 Description 页面填入版权声明。
#include "FPSProject.h"
#include "FPSProjectGameMode.h"
void AFPSProjectGameMode::StartPlay()
{
Super::StartPlay();
if (GEngine)
{
// 显示调试信息五秒。
// -1"键"值(首个参数)说明我们无需更新或刷新此消息。
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Hello World, this is FPSGameMode!"));
}
}
06 02 视频
06 02 01 .h
06 02 02 .cpp
06 03 我的FPS不带初学者内容
06 03 01 .h
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "FPSProjectGameMode.generated.h"
UCLASS(minimalapi)
class AFPSProjectGameMode : public AGameModeBase
{
GENERATED_BODY()
public:
AFPSProjectGameMode();
};
06 03 02 .cpp
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#include "FPSProjectGameMode.h"
#include "FPSProjectHUD.h"
#include "FPSProjectCharacter.h"
#include "UObject/ConstructorHelpers.h"
AFPSProjectGameMode::AFPSProjectGameMode()
: Super()
{
// set default pawn class to our Blueprinted character
static ConstructorHelpers::FClassFinder<APawn> PlayerPawnClassFinder(TEXT("/Game/FirstPersonCPP/Blueprints/FirstPersonCharacter"));
DefaultPawnClass = PlayerPawnClassFinder.Class;
// use our custom HUD class
HUDClass = AFPSProjectHUD::StaticClass();
}