您的位置:首页 > 产品设计 > UI/UE

UE4学习笔记: Gameplay Classes

2016-07-13 19:36 495 查看
增加类
编辑器中有一个类向导, 可以生成类所需要的文件和基础宏





头文件
由于UE4对C++做了扩展, 实现了如序列化反射等特性, 跟Qt的做法类似: 在代码中加入一些宏关键字, 在编译期间生成相应的C++代码. 因此, 对于每个类来说, 都有会生成一个ClassName.generated.h的文件

类声明

UCLASS([specifier, specifier, ...], [meta(key=value, key=value, ...)])
class ClassName : ParentName
{
GENERATED_UCLASS_BODY()
}


UCLASS可以指定一说明符, 用于描述类的行为, 类似C#

功能相关

Abstract: 抽象基类, 无法实例化
Config: 指定配置文件, 跟UE3一样
Const
ConvertsionRoot: 子类只能cast到这一级
CustomConstructor: 不生成默认的构造函数
DefaultToInstanced
DependsOn
Deprecated: 不会被序列化或保存
MinimalAPI/RequiredAPI: 只暴露指定函数给其它模块, 减少编译时间
NonTransient
PerObjectConfig
Within: 只能用在指定类里

Property Window相关

AutoExpandCategories/AutoCollapseCategories
AdvancedClassDisplay
CollapseCategories/DontCollapseCategories
EditInlineNew: 可以在属性窗口中创建
HideCategories/HideDropdown
HideFunctions/ShowFunctions

Blueprint相关

Blueprintable/NotBlueprintable
BlueprintType

Editor相关

ClassGroup: ActorBrowser里的分组
NotPlaceable
Placeable

类实现
需要在cpp中加入IMPLEMENT_CLASS宏

构造函数

AMyClass::AMyClass(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}


ObjectInitializer用于从archetype或CDO中初始化属性.

ATimelineTestActor::ATimelineTestActor(const class FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
// Structure to hold one-time initialization
struct FConstructorStatics
{
ConstructorHelpers::FObjectFinder<UStaticMesh> Object0;
FConstructorStatics()
: Object0(TEXT("StaticMesh'/Game/UT3/Pickups/Pickups/Health_Large/Mesh/S_Pickups_Base_Health_Large.S_Pickups_Base_Health_Large'"))
{
}
};
static FConstructorStatics ConstructorStatics;

// Property initialization

StaticMesh = ConstructorStatics.Object0.Object;
}


ConstructorStatics用于初始化复杂类型, 避免每次构造产生额外性能开销. 常用于Asset引用, Class引用, Name类型等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: