一、创建组件
以 PointLight 组件为例;
UPointLightComponent*,表示原始的 C++ 指针;轻量级,直接存储对象的内存地址;不提供额外的内存管理或安全性检查;需手动管理对象的生命周期(如确保指针不为空);
TObjectPtr,TObjectPtr<T> 是 UE 5.0 引入的一种智能指针类型,专门用于指向 UObject 派生类;提供了额外的安全性和功能,自动处理对象的加载和卸载,支持弱引用(Weak Reference),避免循环引用导致的内存泄漏,在调试模式下提供额外的检查,帮助捕获悬空指针等问题;与 UE 的资源管理系统集成,支持异步加载和垃圾回收;比原始指针稍重,但提供了更高的安全性;
CreateDefaultSubobject,用于在 Actor 的构造函数中创建并初始化子对象(Subobject),如 Component;也是 UE 对象系统的一部分,确保子对象能够正确地被 UE 管理和序列化;
Specifiers 控制变量行为的说明符:VisibleAnywhere, 变量在编辑器中可见,但不能编辑;EditAnywhere, 变量在编辑器中可见且可编辑BlueprintReadOnly, 变量在蓝图中只读,不能修改;BlueprintReadWrite, 变量在蓝图中可读可写;Category, 将变量分组到指定的类别,方便查找;**meta=(AllowPrivateAccess=true), 允许蓝图访问私有变量;
//TestActor.h
#include "Components/PointLightComponent.h"
...
public:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "VALUE")
class UPointLightComponent* pointlight;
//class 表示为类型,可省略
//或 TObjectPtr<UPointLightComponent> pointlight;
...
//TestActor.cpp
...
pointlight = CreateDefaultSubobject<UPointLightComponent>(TEXT("pointlight"));
...
二、调用重叠事件
UFUNCTION(BlueprintNativeEvent),蓝图原生事件;允许在 C++ 中实现一个函数且同时在蓝图中重写该函数;C++ 中的实现是默认实现,蓝图中的实现是可选的;如蓝图中重写了该函数,调用时会执行蓝图的实现;否则,调用 C++ 的实现;
_Implementation,是 BlueprintNativeEvent 函数的默认实现;如蓝图中没有重写该函数,调用时会执行此实现;函数名必须与声明函数名一致,并加上 _Implementation 后缀;
SetupAttachment 用于将组件附加到另一个组件上的函数;可建立组件间的父子关系,形成层级结构;子组件的变换是相对于父组件的;父组件是 nullptr,子组件会成为根组件(RootComponent);
OnComponentBeginOverlap.AddDynamic,用于将一个函数绑定到组件的 事件上,当组件与其他组件发生重叠时,绑定的函数会被调用;与其他组件发生重叠时触发,适用于碰撞检测;重叠的双方都必须启用 Generate Overlap Events;








