UE4-UE5虚幻引擎-前置学习三,优化,基础CPP

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:在蓝图中调用
  1. 在编辑器中将 AMyActor 拖入场景或作为蓝图父类。

  2. 在蓝图中右键搜索 MyCppFunction 并调用。

(*(重点是,在蓝图能调用用AMyActor, 这个信息足够了)

2. 创建编辑器工具按钮/菜单

步骤 1:创建编辑器模块
  1. 在项目目录下新建一个名为 Editor 的文件夹(如 Source/MyProjectEditor)。

  2. 创建 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》抢先体验版评测!

场合: https://www.bilibili.com/video/BV1WMUCB2E8C?vd_source=87cc78b95e8f0a7ebd13a1d527fea09b&spm_id_from=333.788.videopod.sections

10M以上的场景不敢打开,50M更是不用想

参考:

建筑软件工业,信息工程的一些解决方案(商业)

https://www.shdsd.com/resources/how-to-leverage-unreal-engine-5-and-perforce-p4-to-enhance-the-visualization-of-your-architectural-projects/index.html

一个UE游戏的环境配置解决方法-视频录像,从配置反推出(也算是逆向)存在的通用问题

https://www.shdsd.com/resources/how-to-leverage-unreal-engine-5-and-perforce-p4-to-enhance-the-visualization-of-your-architectural-projects/index.html

相关推荐
zhangzhangkeji4 小时前
UE5线程进阶(3-2):任务图的相关源码整理。 FGraphEvent 与 TGraphTask 的区别和联系
ue5
SmalBox17 小时前
【节点】[ReflectionProbe节点]原理解析与实际应用
unity3d·游戏开发·图形学
SmalBox2 天前
【节点】[MainLightShadow节点]原理解析与实际应用
unity3d·游戏开发·图形学
zhangzhangkeji2 天前
UE5线程进阶(3-1):
ue5
zhangzhangkeji2 天前
UE5线程进阶(2-3):enum ENamedThreads命名空间 :: Type : int32 { RHIThread = 0 } 是渲染硬件接口线程
ue5
SmalBox3 天前
【节点】[MainLightRealtimeShadow节点]原理解析与实际应用
unity3d·游戏开发·图形学
lambda3 天前
游戏开发者的CMU动作数据使用指南:如何将AMC文件转Unity动画
unity·游戏开发·动作捕捉·cmu
zhangzhangkeji3 天前
UE5线程进阶(2-1):枚举类EAsyncExecution,作业类TAsyncRunnable、TAsyncQueuedWork,及全局线程函数 Async(..),及线程调用的 4 种方法总结
ue5
zhangzhangkeji4 天前
UE5线程进阶(1):
ue5