以下是将您提供的所有 UE4 C++ 代码片段整理成的 Markdown 表格格式:
🧩 核心类与宏定义
功能 |
代码示例 |
说明 |
蓝图可编辑类 |
UCLASS(Blueprintable) |
使C++类可在蓝图中编辑 |
蓝图可生成组件 |
UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent)) |
组件可在蓝图中直接添加到Actor |
蓝图识别变量 |
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XXX") |
变量在编辑器和蓝图中可见可编辑 |
范围限制 |
meta = (ClampMin=0.1, ClampMax = 100) |
限制数值输入范围 |
蓝图调用函数 |
UFUNCTION(BlueprintCallable, Category = "XXX") |
函数可在蓝图中调用 |
蓝图实现事件 |
UFUNCTION(BlueprintImplementableEvent) void OnTest(); |
蓝图实现C++定义的事件 |
蓝图原生事件 |
UFUNCTION(BlueprintNativeEvent) void SomeFunction(); void AMyActor::SomeFunction_Implementation() |
C++提供默认实现,蓝图可覆盖 |
双分支输出 |
UFUNCTION(BlueprintCallable, Meta = (ExpandEnumAsExecs = "Branches")) void BranchFun(int32 Input, EMyEnum& Branches); |
函数返回枚举分支供蓝图使用 |
中文枚举 |
UENUM(BlueprintType) enum class EenumChinese :uint8 { E_EN UMETA(DisplayName = "英文"), E_CH UMETA(DisplayName = "中文")} |
在蓝图中显示中文枚举选项 |
🔄 生命周期与内存管理
功能 |
代码示例 |
说明 |
字符串创建 |
FString::Printf(TEXT("aa bb")); |
格式化创建字符串 |
防止GC回收 |
Udata->AddToRoot(); Udata->RegisterWithGameInstance((UObject*)WorldContextObject); |
防止对象被垃圾回收 |
强制GC |
GEngine->ForceGarbageCollection(true); |
强制进行垃圾回收 |
对象销毁 |
MyActor->Destroy(); MyActor->SetLifeSpan(1); |
立即或延迟销毁对象 |
生命周期设置 |
SetLifeSpan(10.0f); |
设置对象生命周期 |
析构函数 |
virtual void BeginDestroy() override; |
对象销毁时调用的函数 |
编辑器属性变更 |
#if WITH_EDITOR virtual void PostEditChangeProperty(FPropertyChangedEvent&) override; #endif |
编辑器属性变更时回调 |
📦 资源与引用管理
功能 |
代码示例 |
说明 |
类引用 |
TSubClassOf<UObject> |
引用UObject派生类 |
软引用 |
TSoftObjectPtr<UObject> TSoftClassPtr<UObject> |
非强制加载的资源引用 |
软路径 |
FSoftObjectPath SoftReferenceObject; FSoftClassPath SoftReferenceClass; |
资源的软路径引用 |
动态加载资源 |
UClass* aa = LoadClass<UUserWidget>(NULL, TEXT("Blueprint'/Game/...')); |
运行时动态加载蓝图类 |
查找类 |
UClass* ActorRef = FindObject<UClass>(ANY_PACKAGE,*FString("AActor")); |
查找已加载的类 |
动态材质 |
UMaterialInstanceDynamic::Create(Material, nullptr); |
创建动态材质实例 |
设置材质参数 |
MiniMapMatDynamic->SetTextureParameterValue(FName("Param"), Texture); |
设置动态材质参数 |
⏱️ 时间与定时器
功能 |
代码示例 |
说明 |
延迟执行 |
UKismetSystemLibrary::Delay(GetWorld(), 0.1, LatentActionInfo); |
蓝图样式的延迟执行 |
Tick控制 |
PrimaryActorTick.TickInterval = 1.0f; |
设置Tick调用间隔 |
定时器 |
FTimerHandle Handle; GetWorldTimerManager().SetTimer(Handle, this, &Func, 1.0f, true); GetWorldTimerManager().ClearTimer(Handle); |
定时器管理 |
获取时间 |
FDateTime::Now().ToString(); FPlatformTime::Seconds; |
获取当前时间 |
时间转换 |
FDateTime::UtcNow().ToUnixTimestamp(); |
转换为Unix时间戳 |
🎮 输入与控制
功能 |
代码示例 |
说明 |
输入模式 |
FInputModeGameOnly InputMode; SetInputMode(InputMode); |
设置输入模式 |
按键绑定 |
InputComponent->BindKey(EKeys::Z, IE_Released, this, &Action); InputComponent->BindAction("Action", IE_Released, this, &Action); |
绑定按键和动作 |
按键检测 |
GetWorld()->GetFirstPlayerController()->WasInputKeyJustPressed(Key) |
检测按键按下 |
鼠标位置 |
GEngine->GameViewport->GetMousePosition(MousePosition); |
获取鼠标位置 |
控制器获取 |
UGameplayStatics::GetPlayerController(GWorld, 0); |
获取玩家控制器 |
🌐 网络与多人游戏
功能 |
代码示例 |
说明 |
网络频率 |
NetUpdateFrequency = 66.0f; MinNetUpdateFrequency = 33.0f; |
设置网络更新频率 |
复制变量 |
UPROPERTY(Replicated) |
变量复制到客户端 |
复制回调 |
UPROPERTY(ReplicatedUsing=OnRep_GuardState) |
变量复制时回调 |
服务器函数 |
UFUNCTION(Server, Reliable, WithValidation) void ServerFunc(); bool ServerFunc_Validate(); |
RPC服务器函数 |
权限检查 |
Role == ROLE_Authority |
检查是否在服务器 |
网络模式 |
ENetMode netMode = GetNetMode(); |
获取当前网络模式 |
网络优化 |
FVector_NetQuantize vectorr; |
减少网络传输精度 |
🧱 组件与Actor管理
功能 |
代码示例 |
说明 |
组件获取 |
GetComponentByClass(UXXXComponent::StaticClass()); |
按类获取组件 |
组件附加 |
SphereComp->SetupAttachment(MeshComp); |
附加组件到父组件 |
Actor生成 |
World->SpawnActor<AActor>(Class, Location, Rotation); |
生成Actor |
Actor查找 |
UGameplayStatics::GetAllActorsOfClass(GetWorld(), Class, FoundActors); |
查找场景中的Actor |
设置位置 |
SetActorLocation(FVector(0,0,250)); |
设置Actor位置 |
设置旋转 |
SetActorRotation(FRotator(0,0,0)); |
设置Actor旋转 |
设置子Actor |
HandObject->SetChildActorClass(ASlAiHandObject::StaticClass()); |
设置子Actor类 |
📐 数学与几何计算
功能 |
代码示例 |
说明 |
距离计算 |
FVector::Dist(PointA, PointB); |
计算两点距离 |
向量长度 |
Vector.Size(); |
计算向量长度 |
方向计算 |
FRotationMatrix::MakeFromX(End-Start).Rotator(); |
计算朝向目标的旋转 |
单位向量 |
Vector.GetSafeNormal(); |
获取单位向量 |
速度计算 |
FVector::DotProduct(Velocity, Direction); |
计算速度在方向上的分量 |
限制范围 |
FMath::Clamp<float>(Value, 0.0, 1.0); |
限制数值范围 |
随机数 |
Stream.RandRange(0, Max); |
生成随机数 |
🛡️ 碰撞与物理
功能 |
代码示例 |
说明 |
碰撞设置 |
SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); |
启用碰撞 |
碰撞配置 |
SetCollisionProfileName(FName("NoCollision")); |
设置碰撞配置 |
通道响应 |
SetCollisionResponseToAllChannels(ECR_Ignore); |
设置对所有通道的响应 |
物理材质 |
UPhysicalMaterial::DetermineSurfaceType(Hit.PhysMaterial.Get()); |
获取物理材质 |
射线检测 |
GetWorld()->LineTraceSingleByChannel(...); |
单射线检测 |
物理旋转锁定 |
BodyInstance->bLockZRotation = true; |
锁定物理旋转 |
投射计算 |
UGameplayStatics::SuggestProjectileVelocity(...); |
计算抛射体轨迹 |
📝 调试与日志
功能 |
代码示例 |
说明 |
屏幕输出 |
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, TEXT("Msg")); |
屏幕显示调试信息 |
日志输出 |
UE_LOG(LogTemp, Warning, TEXT("Info= %s"), *Message); |
输出到日志 |
自定义日志 |
DEFINE_LOG_CATEGORY(LogCustom); UE_LOG(LogCustom, Warning, TEXT("Msg")); |
自定义日志分类 |
蓝图打印 |
FMessageLog("DebugLog").Warning(FText::FromString(Str)); |
蓝图样式的消息打印 |
确保验证 |
ensure(IsValid(Object)); |
验证条件,失败时中断 |
控制台命令 |
GetWorld()->GetFirstPlayerController()->ConsoleCommand("quit"); |
执行控制台命令 |
🗺️ 游戏状态与UI
功能 |
代码示例 |
说明 |
游戏暂停 |
SetPause(true); |
暂停游戏 |
加载地图 |
UGameplayStatics::OpenLevel(GetWorld(), *mapName); |
加载新地图 |
退出游戏 |
UKismetSystemLibrary::QuitGame(...); |
退出游戏 |
创建UI |
CreateWidget<UUserWidget>(Controller, WidgetClass); |
创建UI控件 |
添加UI到视图 |
Widget->AddToViewport(); |
显示UI控件 |
屏幕尺寸 |
GetViewportSize(ViewportSizeX, ViewportSizeY); |
获取屏幕尺寸 |
获取HUD类 |
HUDClass = AXXXHUD::StaticClass(); |
获取HUD类 |
📁 文件与系统操作
功能 |
代码示例 |
说明 |
打开文件夹 |
FPlatformProcess::ExploreFolder(*Path); |
打开系统文件夹 |
执行程序 |
FPlatformProcess::CreateProc(*ExePath, nullptr, true, false, false, nullptr, -1, nullptr, nullptr); |
执行外部程序 |
截图 |
FScreenshotRequest::RequestScreenshot(Filename, false, true); |
游戏截图 |
配置文件 |
GConfig->SetString(*Section, TEXT("Key"), TEXT("Value"), GGameIni); GConfig->GetFloat(*Section, TEXT("Key"), Value, GGameIni); |
读写配置文件 |
项目信息 |
FApp::GetProjectName(); |
获取项目名称 |
路径操作 |
FPaths::ConvertRelativePathToFull(FPaths::ProjectDir()); |
路径转换 |
MD5加密 |
FMD5::HashAnsiString(TEXT("text")); |
MD5加密字符串 |
SHA1加密 |
FSHA1::HashBuffer(...); |
SHA1加密 |
🤖 AI与行为树
功能 |
代码示例 |
说明 |
导航点 |
UNavigationSystem::K2_GetRandomReachablePointInRadius(...); |
获取随机导航点 |
行为树任务 |
virtual EBTNodeResult::Type ExecuteTask(...) override; |
行为树任务执行 |
装饰器 |
virtual bool CalculateRawConditionValue(...) const; |
行为树条件检查 |
黑板键 |
UBlackboardKeyType_Vector* KeyType = NewObject<UBlackboardKeyType_Vector>(); |
创建黑板键类型 |
敌人状态 |
UBlackboardKeyType_Enum* StateKey = NewObject<UBlackboardKeyType_Enum>(); |
创建枚举类型黑板键 |
🌍 本地化与多语言
功能 |
代码示例 |
说明 |
本地化文本 |
NSLOCTEXT("namespace", "key", "value") |
创建本地化文本 |
字符串转义 |
data.ReplaceEscapedCharWithChar(&data.GetCharArray()); |
处理转义字符 |
中文显示 |
UENUM(BlueprintType) enum class EenumChinese {...} |
支持中文显示 |
🔊 音频管理
功能 |
代码示例 |
说明 |
播放音效 |
UGameplayStatics::SpawnSoundAttached(soundcue, RootComponent); |
附加播放音效 |
获取音频设备 |
GEngine->GetMainAudioDevice(); |
获取主音频设备 |
混音器设置 |
AudioDevice->SetSoundMixClassOverride(...); |
设置混音器覆盖 |
失焦音量 |
GConfig->GetFloat(TEXT("Audio"), TEXT("UnfocusedVolumeMultiplier"), ...); |
失焦时音量设置 |
这个表格整理涵盖了您提供的所有代码片段,按照功能分类组织,便于快速查找和使用。每个表格包含功能描述、代码示例和简要说明三列。