UnrealEngin C++ 读取源码
[toc]
常用库
UGameplayStatics
获取
- GetPlayerController
- GetPlayerCharacter
- GetPlayerPawn
- GetPlayerCameraManager
- GetGameInstance
- GetGameMode
- GetGameState
生成
- SpawnObject
- SpawnSound2D
- SpawnEmitterAttached
- SpawnDecalAtLocation
打开关卡
- OpenLevel
- APlayerController::ClientTravel
说明符
属性UPROPERTY
可见性、编辑性、对蓝图的设定
- Category="主目录名|次目录名" 蓝图中把些名一样的变量集中在一起
- VisibleDefaultsOnly
- BlueprintAssignable 当前属性为
动态
、多播
委托
方法UFUNCTION
- BlueprintCallable c++ 实现,蓝图调用
- BlueprintImplementableEvent 蓝图实现,c++ 调用
- BlueprintNativeEvent c++ 与蓝图都实现,c++ 实现要加后缀
Implementation
类UCLASS
- BlueprintType 表示其他类能定义这个类类型的蓝图变量
- Blueprintable 表示能在编辑器中创建这个类的蓝图子类
Exec 这个函数可以在控制台里调用,一般在GameInstance
或GameMode
之类的类里使用会有效果,其他自建的类有提示但无效果
除非你重写GI
或GM
的ProcessConsoleExec
// GameInstance.cpp中
// 重写ProcessConsoleExec
bool XXX::ProcessConsoleExec(const TCHAR* Cmd, FOutputDevice& Ar, UObject* Executor)
{
bool Res = Super::ProcessConsoleExec(Cmd, Ar, Executor);
if(!Res)
{
for(TActorIterator<ClassType> It(GetWorld()); It; ++It){
Res = It->ProcessConsoleExec(Cmd, Ar, Executor);
}
}
return Res;
}
元属性 限定对象属性mate
主要是给蓝图中使用的,格式如下:
meta = (xxx , yyy = bbb )
常用内容:
-
MetaClass = "Actor" ,表示这个变量类型为Actor
-
DisplayName = "AllowEdit" ,表示在蓝图中显示的名字
-
ToolTip = "I am a ToolTip" , 表示指针悬停在变量上时的小信息提示内容
-
ClampMin = 10, 表示最小值
-
ClampMax = 100, 表示最大值
-
BindWidget , 在
Widget
中的控件变量名与,当前c++的变量名一样就能使用。 -
BindWidgetAnim , 同上只是用于动画名称,配合
UWidgetAnimation*
变量类型,而且在需要添加Transient
属性,具体参见下方实例 -
EditCondition = "" 控制当前变量是否可编辑
- EditCondition = "bool类型变量",填入一个带有
UPROPERTY
属性的bool
类型变量,只有当这个bool
变量为true
时,当前变量才可编辑 - EditCondition = "枚举类型==具体枚举",填入一个带有
UENUM
属性的enum
类型变量,只有当这个enum
变量为对应的枚举
时,当前变量才可编辑 - EditCondition = "条件表达式",填入一个条件表达式,比如
Health<30
。
- EditCondition = "bool类型变量",填入一个带有
-
AllowedClasses="Texture" 当前变量选择类型时确定为指定的名称的类型
UPROPERTY(Meta = (BindWidget))
UButton* ButtonTwo;
// 动画变量
UPROPERTY(Transient, meta=(BindWidgetAnim))
UWidgetAnimation* HoverEnterAni;
基于UObject类的指针
-
对象
的引用
蓝图里为Object Reference
使用蓝色
来表示。
C++中对应UObject*
场景中实际存在的对象实例的指针,硬连接 -
类型
的引用
蓝图里为Class Reference
使用紫色
来表示。
C++中对应TSubclassOf<UObject>
对象类的引用,允许使用类型安全传递UClass模板 -
对象
的软引用
蓝图里为Object Reference
使用天蓝色
来表示。
C++中对应TSoftObjectPtr<UObojct>
对象的软引用,需要的时候再加载 -
类型
的软引用
蓝图里为Class Reference
使用粉红
来表示。
C++中对应TSoftClassPtr<UObject>
对象类的软引用,需要的时候再加载 -
资源
的引用
C++中对应TAssetPtr<UObject>
资源的引用,是对FStringAssetReference
的封装,包含对象路径与对象的弱指针TWakeObjectPtr
-
资源路径
的引用
C++中对应结构体FStringAssetReference
对象路径的引用,不用区分类型。
这个可以引用所有的类,如果想指定引用,需要加下边的meat
修饰符
从4.18
开始,使用下边替代原来的结构体
FSoftObjectPath -> FStringAssetReference
FSoftClassPath -> FStringClassReference
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (MetaClass = "Actor"))
FStringAssetReference AssetRef;
宏
// .h
#if WITH_EDITOR
virtual void XXX::PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
#endif
// .cpp
#if WITH_EDITOR
void XXX::PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent)
{
Super::PostEditChangeProperty(PropertyChangedEvent);
if(PropertyChangedEvent.Property && PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED(类名,变量名))
{
// 进行操作比如
变量 += 10;
}
}
#endif
评论