以下是将您提供的所有 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"), ...); 失焦时音量设置

这个表格整理涵盖了您提供的所有代码片段,按照功能分类组织,便于快速查找和使用。每个表格包含功能描述、代码示例和简要说明三列。