GameplayAbilitiesSystem(三)

目录

前言

上一章节中我们创建好了项目,配置好了版本管理工具(Git)。打开 UE5 可以在 Content Drawer 中看到如下项目结构:

项目初始结构完成后,下一步可以开始创建 C++ 类。创建 C++ 类先从角色开始,但在开始之前,我们先检查一下我们准备的素材有没有问题。依次点击 Content Drawer,选择 Content - Assets - Characters - Aura 目录,如果没有问题,右侧会有名称 SKM_Aura 的 Skeletal Mesh 文件,双击打开,如果显示如下则没有问题。

接下来我们需要创建的 C++ 类来指向它。

父类

创建角色类之前,我们应该考虑到,游戏中不仅有角色,还有敌人,这两者之间有些功能(或说特性)是共通,所以没有必要写两套。

角色和敌人继承相同父类就可以实现特性共享。

创建父类

点击菜单栏 【Tools】-【New C++ Class...】,打开创建 C++ 类窗口。

选择 【Common Classes】-【Character】,点击【Next】。

选中 Public 选项,父类起名为 AuraCharacterBase,同时注意类文件所在路径是否正确,然后点击【Create Class】。

由于我们关闭了 Live Coding,所以在创建新类时不会自动编译,只会生成 C++ 类文件。生成结束后关闭 UE5。引擎会自动为我们生成 Aura.sln 文件,双击打开。

首次使用 Visual Studio 2022 打开项目,会提示安装必要组件,直接点击安装即可。然后点开 Games - Aura - Source - Aura - Private, Public 目录,便能看到刚才创建的类文件。

注:到此,考虑将刚才创建的类文件使用版本管理工具提交到远程仓库中。之后每完成一部分功能,务必执行一次版本管理操作,防止丢失数据,养成好习惯。

父类优化

父类不需要有实例,所以可以设置为 Abstract,同时也不需要执行任何 Tick 操作,而角色输入会单独配置,敌人也会配置 AI 控制器,所以父类也不需要任何输入功能组件。因此对父类做出以下优化:

  • 标注为 Abstract 类型;
  • 删除 Tick() 和 SetupPlayerInputComponent() 方法;
  • 设置 bCanEverTick 为 false;
  • 删除一些不必要的注释(可选)。

优化后的父类头文件和 .cpp 文件内容如下:

AuraCharacterBase.h

c 复制代码
// Copyright Markus La

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "AuraCharacterBase.generated.h"

UCLASS(Abstract)
class AURA_API AAuraCharacterBase : public ACharacter
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	AAuraCharacterBase();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;
};

AuraCharacterBase.cpp

c 复制代码
// Copyright Markus La


#include "Character/AuraCharacterBase.h"

// Sets default values
AAuraCharacterBase::AAuraCharacterBase()
{
 	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = false;
}

// Called when the game starts or when spawned
void AAuraCharacterBase::BeginPlay()
{
	Super::BeginPlay();
}

为了使项目结构更合理,我们把父类,角色类,敌人类都放到 Character 目录下,所以需要将项目结构进行调整。

Visual Studio 中调整项目结构比较麻烦。这里我们先关闭 Visual Studio 2022,在 Source - Aura - Private, Public 目录中分别创建 Character 文件夹,再将 AuraCharacterBase.h 和 AuraCharacterBase.cpp 移动至各自的 Character 文件夹中。回到项目根目录,删除 Binaries、Intermediate 两个文件夹,右键 Aura.uproject 文件,选择 Generate Visual Studio project files。

成功后再打开 Aura.sln,即可完成项目结构的调整。

角色和敌人类

创建好父类后,打开 Visual Studio 2022,点击运行(本地 Windows 调试器),会打开 UE5。打开 Content Drawer,会看到与Content 目录同级多出了 C++ Classes 的目录,点开会看到 Aura - Public - Character 目录,选择 Character 目录,右侧就能看到我们创建的 AuraCharacterBase 类。

创建角色类

角色类和敌人类的创建过程大体相似,所以仅以角色类的创建为例。

右键 AuraCharaqcterBase 父类,选择 Create C++ class derived form AuraCharacterBase,如上图所示。同样,先为角色类起名为 AuraCharacter,过程同创建父类差不多,提示"创建 AuraCharacter 类成功,但要想看到需先编译,是否需要编辑代码?",同样我们选择否。

相同的过程创建敌人类,名称为 AuraEnemy。

关闭 UE5,打开 Visual Studio 2022 查看类文件是否创建成功。

相关推荐
晴夏。14 天前
GAS下的网络同步的全面分析【超级全面】
游戏引擎·ue·gas·网络同步
麦克马19 天前
GameplayAbilitiesSystem(四)
gas
麦克马19 天前
GameplayAbilitiesSystem(五)
gas
妙为23 天前
UE5中武器未跟随角色
ue5·gas·gameplay
Joy T2 个月前
【Web3】深入解析Coin-Token、ERC20-ERC721、自定义错误机制与合约继承
web3·代币·自定义错误·gas·erc-20·原生币·合约继承
qq_428639615 个月前
aura:学习大纲
gas·aura
许强0xq6 个月前
Q10: 对于地址白名单,使用 mapping 还是 array 更好?为什么?
面试·职场和发展·web3·solidity·evm·gas
小码闭眼ctrv7 个月前
gas 优化
区块链·solidity·gas
开发游戏的老王10 个月前
[BUG]关于UE5.6编译时出现“Microsoft.MakeFile.Targets(44,5): Error MSB3073”问题的解决
c++·ue5·bug·虚幻·虚幻5·gas