UE5 移植Editor或Developer模块到Runtime

news/2024/12/22 22:15:06/

要将源码中的非运行时模块移植到Runtime下使用,个人理解就是一个解决编译报错的过程,先将目标模块复制到项目的source目录内,然后修改模块文件夹名称,修改模块.build.cs与文件夹名称保持一致

修改build.cs内的类名 ,每个模块都要修改 

// Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool;public class RTDesktopPlatform : ModuleRules
{public RTDesktopPlatform(ReadOnlyTargetRules Target) : base(Target){PrivateIncludePaths.Add("RTDesktopPlatform/Private");PrivateDependencyModuleNames.AddRange(new string[] {"Core","ApplicationCore","Json"});if (Target.IsInPlatformGroup(UnrealPlatformGroup.Linux)){PrivateIncludePathModuleNames.AddRange(new string[] {"RTSlateFileDialogs",});DynamicallyLoadedModuleNames.Add("RTSlateFileDialogs");AddEngineThirdPartyPrivateStaticDependencies(Target, "SDL2");}UnsafeTypeCastWarningLevel = WarningLevel.Error;}
}
// Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool;public class RTSlateFileDialogs : ModuleRules
{public RTSlateFileDialogs(ReadOnlyTargetRules Target) : base(Target){PrivateIncludePaths.AddRange(new []{"RTSlateFileDialogs/Private",});PrivateDependencyModuleNames.AddRange(new string[] {"Core","CoreUObject","InputCore","Slate","SlateCore","RTDirectoryWatcher",});PrivateIncludePathModuleNames.Add("TargetPlatform");}
}
// Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool;public class RTDirectoryWatcher : ModuleRules
{public RTDirectoryWatcher(ReadOnlyTargetRules Target) : base(Target){PrivateIncludePaths.Add("RTDirectoryWatcher/Private");PrivateDependencyModuleNames.Add("Core");UnsafeTypeCastWarningLevel = WarningLevel.Error;}
}

刷新项目后修改项目.uproject文件,添加启动模块

{"FileVersion": 3,"EngineAssociation": "{415CA20E-4C6F-969C-0B60-4DBEE9818054}","Category": "","Description": "","Modules": [{"Name": "MyRunImpFBX","Type": "Runtime","LoadingPhase": "Default","AdditionalDependencies": ["Engine"]},{"Name": "RTDesktopPlatform","Type": "Runtime","LoadingPhase": "Default"},{"Name": "RTSlateFileDialogs","Type": "Runtime","LoadingPhase": "Default"},{"Name": "RTDirectoryWatcher","Type": "Runtime","LoadingPhase": "Default"}],"Plugins": [{"Name": "ModelingToolsEditorMode","Enabled": true,"TargetAllowList": ["Editor"]}]
}

 在项目build.cs中添加依赖项

// Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool;public class MyRunImpFBX : ModuleRules
{public MyRunImpFBX(ReadOnlyTargetRules Target) : base(Target){PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;PublicDependencyModuleNames.AddRange(new string[]{"Core","CoreUObject","Engine","InputCore","EnhancedInput","HeadMountedDisplay","Slate","SlateCore","UMG","RTDesktopPlatform",});PrivateDependencyModuleNames.AddRange(new string[] {  });}
}

此时编译会有很多错误,后面就是解决报错的过程,过程中删除了报错的DesktopPlatform_API,打包后模块丢失,修改了模块的IMPLEMENT_MODULE( FDesktopPlatformModule, RTDesktopPlatform );后解决问题,


http://www.ppmy.cn/news/1557304.html

相关文章

8K+Red+Raw+ProRes422分享5个影视级视频素材网站

Hello,大家好,我是后期圈! 在视频创作中,电影级的视频素材能够为作品增添专业质感,让画面更具冲击力。无论是广告、电影短片,还是品牌宣传,高质量的视频素材都是不可或缺的资源。然而&#xff…

Golong中无缓冲的 channel 和 有缓冲的 channel 的区别

在Golang中,channel是用于goroutine之间通信的并发原语,它可以是无缓冲的,也可以是有缓冲的。无缓冲的channel和有缓冲的channel之间存在显著的区别,主要体现在以下几个方面: 一、缓冲区大小与存储能力 无缓冲channe…

JVM和数据库面试知识点

JVM内存结构 主要有几部分:堆、栈、方法区和程序计数器 堆是JVM中最大的一块内存区域,用于存储对象实例,一般通过new创建的对象都存放在堆中。堆被所有的线程共享,但是它的访问时线程不安全的,通常通过锁的机制来保证线…

java——Synchronized与Lock

Synchronized和Lock都是Java中用于实现线程同步的机制,但它们在实现方式、使用方式以及提供的特性上存在一些显著的区别。以下是对两者的详细比较: 一、定义与实现方式 Synchronized 是Java语言内置的同步机制。基于监视器锁(monitor lock&a…

flask-admin的modelview 实现list列表视图中某个列字段值翻译

背景: flask-admin 开发中modelview视图是非常强大的,但文档写的很难受,只能通过源码慢慢摸索学习,一点点记录 材料: 可用的flask-admin 环境 制作: 样例代码: 1、modelview 视图代码 col…

【JavaEE初阶】线程 和 thread

本节⽬标 认识多线程 掌握多线程程序的编写 掌握多线程的状态 一. 认识线程(Thread) 1概念 1) 线程是什么 ⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代码. 多个线程之间 "同时" 执⾏着多份代码. 还…

仓鼠身长能长到多少厘米?

仓鼠,作为颇受欢迎的宠物,其小巧玲珑的身形是吸引众多饲主的重要原因之一。那么,仓鼠的身长究竟能长到多少厘米呢?这背后其实蕴含着不少有趣的知识。 一般而言,常见的仓鼠品种如三线仓鼠、紫仓仓鼠等,成年…

十九、IPD在国内的现状与成功案例分析

IPD在国内的现状与成功案例分析 随着市场竞争的加剧和消费者需求的日益多样化,企业在产品开发过程中面临着更高的挑战。如何在有限的时间内高效开发出符合市场需求的高质量产品,成为了各大企业亟待解决的问题。在此背景下,集成产品开发&…