UE4官方Third Person框架初学者见解

本文介绍了UE4初学者对官方Third Person框架的理解,包括U/A/F/T/I/E/B类前缀的含义,宏定义如UCLASS、UFUNCTION等的作用。详细解析了GameMode类和Character类的功能,以及如何通过蓝图和C++交互,特别是角色移动和相机控制的实现。
摘要由CSDN通过智能技术生成

UE4官方Third Person框架初学者见解

以下是我作为一个UE4初学者在观看官方Third Person框架中对这个框架的理解和体会,如果有什么不正确的地方欢迎指正。

1.虚幻中的类前缀你会见到U,A,F,以下就是很好的罗列其中的意义

• U: UObject继承过来的,例如UTexture
• A: AActor继承过来的,例如AGameMode
• F: 其他的类和结构,例如FName, FVector
• T:模板,例如TArray,TMap,TQueue
• I: 接口类,ITransaction
• E:枚举, ESelectionMode
• B: Boolean, bEnabled

2.用宏定义来包裹C++代码
• UCLASS 来包裹类
• USTRUCT 包裹结构
• UFUNCTION 包裹功能
• UPROPERTY 包裹属性

上面这个介绍是我在http://www.cnblogs.com/NEOCSL/p/4059419.html这篇博客中看到的。

对于这两者,我的理解是:
前缀,是用来告诉我们在个类继承自哪里,我们只需要看类的前缀,我们就能知道这个类的父类是什么。

宏,这四个宏,他是UE4引擎用来区分我们自己本身的内部代码(不需要和引擎交互的部分)和需要和引擎蓝互的部分代码。如果你想要在引擎中调用某个C++类,那么你只需要在类前面加入UCLASS(),那么就可以在引擎中调用这个类,至于以下三个同理,如果你需要定义一个蓝图和C++互通的变量,那么你就需要使用UPROPERTY()来包裹他,在括号中可以声明一些属性来确定这些变量是否可以被访问等,这个在后面会提到。

然后我们看到生成这个Third Person游戏框架,他初始有两个类,一个是GameMode类,一个是Character类。

GameMode类,游戏模式,用于管理游戏的规则,以及玩家的生成也是在此类生成。

MyProjectGameMode.h

#pragma once
#include "GameFramework/GameMode.h"
#include "MyProjectGameMode.generated.h"

UCLASS(minimalapi)
class AMyProjectGameMode : public AGameMode
{
    GENERATED_BODY()
public:
    AMyProjectGameMode(const FObjectInitializer& ObjectInitializer);
};

UCLASS(minimalapi),这段就是上面说的宏,用于包裹类,括号里面的minimalapi是一个关键字声明,作用是使这个类只暴露指定函数给其它模块, 减少编译时间。

这些关键字声明都可以在http://blog.csdn.net/xoyojank/article/details/43814839这篇博客找到,往后翻还有其他宏的关键字介绍。

然后是class AMyProjectGameMode : public AGameMode,这段的意思很明确,就是说明这个类继承自AgameMode类,前缀A表示继承自AActor。

GENERATED_BODY(),这是一个生成构造函数的宏,还有一些其他的定义,需要在类的最前方声明,与之相似的还有GENERATED_UCLASS_BODY(),只不过前者定义了构造函数,后者声明了却没有定义。

AMyProjectGameMode(const FObjectInitializer& ObjectInitializer);由于需要定义自己的构造函数,所以这里并没有使用GENERATED_BODY()定义的默认构造函数,而是重新声明了一个。

MyProjectGameMode.cpp

#include "MyProject.h"
#include "MyProjectGameMode.h"
#include "MyProjectCharacter.h"

AMyProjectGameMode::AMyProjectGameMode(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{
    // set default pawn class to our Blueprinted character
    static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPerson/Blueprints/ThirdPersonCharacter"));
    if (PlayerPawnBPClass.Class != NULL)
    {
        DefaultPawnClass = PlayerPawnBPClass.Class;
    }
}
AMyProjectGameMode::AMyProjectGameMode(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)

这一段我也不甚理解,我猜测ObjectInitializer引用传递是这个类的父类引用,Super是一个变量&#

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值