前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UE4学习笔记: Gameplay Classes

UE4学习笔记: Gameplay Classes

作者头像
逍遥剑客
发布2018-05-21 16:01:35
1.2K0
发布2018-05-21 16:01:35
举报
文章被收录于专栏:逍遥剑客的游戏开发

增加类

编辑器中有一个类向导, 可以生成类所需要的文件和基础宏

头文件

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

类声明

代码语言:javascript
复制
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宏

构造函数

代码语言:javascript
复制
AMyClass::AMyClass(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{
}

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

代码语言:javascript
复制
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类型等

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年02月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档