UE的CPP代码
这个不重要,有兴趣课看看,《学习四》会详细说明:入门级别的CPP和蓝图混用

1. 通过蓝图调用C++函数
步骤 1:在C++类中定义可被蓝图调用的函数
cpp
// MyActor.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class MYPROJECT_API AMyActor : public AActor {
GENERATED_BODY()
public:
// 声明一个蓝图可调用的函数
UFUNCTION(BlueprintCallable, Category = "MyFunctions")
void MyCppFunction(int32 InputValue);
};
cpp
// MyActor.cpp
#include "MyActor.h"
void AMyActor::MyCppFunction(int32 InputValue) {
// 实现逻辑
UE_LOG(LogTemp, Warning, TEXT("C++函数被调用,输入值:%d"), InputValue);
}
步骤 2:在蓝图中调用
-
在编辑器中将
AMyActor拖入场景或作为蓝图父类。 -
在蓝图中右键搜索
MyCppFunction并调用。
(*(重点是,在蓝图能调用用AMyActor, 这个信息足够了)
2. 创建编辑器工具按钮/菜单
步骤 1:创建编辑器模块
-
在项目目录下新建一个名为
Editor的文件夹(如Source/MyProjectEditor)。 -
创建
MyProjectEditor.Build.cs文件,添加依赖:
cpp
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "UnrealEd" });
注册11
cpp
// MyEditorCommands.h
#pragma once
#include "Commands.h"
class FMyEditorCommands : public TCommands<FMyEditorCommands> {
public:
FMyEditorCommands() : TCommands(TEXT("MyEditor"), FText::FromString("My Editor Tools"), NAME_None, FAppStyle::GetAppStyleSetName()) {}
virtual void RegisterCommands() override;
TSharedPtr<FUICommandInfo> MyButtonAction;
};
cpp
// MyEditorCommands.cpp
#include "MyEditorCommands.h"
void FMyEditorCommands::RegisterCommands() {
UI_COMMAND(MyButtonAction, "Run C++ Code", "Execute C++ Logic", EUserInterfaceActionType::Button, FInputChord());
}
步骤 3:实现按钮逻辑
cpp
// MyEditorModule.h
#pragma once
#include "Modules/ModuleManager.h"
class FMyEditorModule : public IModuleInterface {
public:
virtual void StartupModule() override;
virtual void ShutdownModule() override;
private:
void OnMyButtonClicked();
};
cpp
// MyEditorModule.cpp
#include "MyEditorModule.h"
#include "MyEditorCommands.h"
#include "LevelEditor.h"
#include "Framework/MultiBox/MultiBoxBuilder.h"
void FMyEditorModule::StartupModule() {
FMyEditorCommands::Register();
TSharedPtr<FUICommandList> CommandList = MakeShareable(new FUICommandList());
CommandList->MapAction(FMyEditorCommands::Get().MyButtonAction, FExecuteAction::CreateRaw(this, &FMyEditorModule::OnMyButtonClicked));
// 将按钮添加到工具栏
FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");
TSharedPtr<FExtender> ToolbarExtender = MakeShareable(new FExtender);
ToolbarExtender->AddToolBarExtension("Settings", EExtensionHook::After, CommandList, FToolBarExtensionDelegate::CreateLambda([](FToolBarBuilder& Builder) {
Builder.AddToolBarButton(FMyEditorCommands::Get().MyButtonAction);
}));
LevelEditorModule.GetToolBarExtensibilityManager()->AddExtender(ToolbarExtender);
}
void FMyEditorModule::OnMyButtonClicked() {
UE_LOG(LogTemp, Warning, TEXT("C++代码通过编辑器按钮触发!"));
}
步骤 4:注册模块
在 MyProjectEditor.Target.cs 中确保模块被加载:
cpp
ExtraModuleNames.Add("MyProjectEditor");
一些优化资料和来源
最简单的Editor简化版本,流程自动化,提都没人提(暂时不解)
**工作室:**维塔士(Virtuos)
分享内容:[UFSH2025]虚幻引擎5跨平台游戏优化策略 | 沈慧良 维塔士上海工作室 技术总监
场合:
https://www.bilibili.com/video/BV1y62PBeEcA/?vd_source=87cc78b95e8f0a7ebd13a1d527fea09b
**工作室:**腾讯天美
分享内容:GDC 2025 | 《三角洲行动》:高性能高品质的端手地形和生态技术
场合: https://www.gameres.com/911914.html
工作室:
分享内容:
场合:
非专业团队:
分享内容:吃一堑,不长一智!《夜勤人2》抢先体验版评测!
10M以上的场景不敢打开,50M更是不用想


参考:
建筑软件工业,信息工程的一些解决方案(商业)
一个UE游戏的环境配置解决方法-视频录像,从配置反推出(也算是逆向)存在的通用问题