在 Unreal Engine 里,“映射路径”(Virtual Path / Mount Point)通常和插件一起用,比如:
/Plugin/MyPlugin/...但在非插件环境(普通项目模块)里一样可以手动注册 Mount Point,核心就是调用 FPackageName::RegisterMountPoint,把一个虚拟路径映射到磁盘目录。
注册 Mount Point
#include "Misc/PackageName.h"
#include "Misc/Paths.h"
...
{
// 虚拟路径
FString VirtualPath = TEXT("/MyData");
// 真实路径
FString PhysicalPath = FPaths::ProjectDir() / TEXT("MyData");
FPackageName::RegisterMountPoint(VirtualPath, PhysicalPath);
}效果:
/MyData/Textures/T_Test
↓
<Project>/MyData/Textures/T_Test.uassetUE 就能通过 /MyData/... 访问资源。
最佳注册时机
模块的 StartupModule 会在引擎完全启动、资源开始大规模加载之前执行。
/Source/<ProjectName>/<ProjectName>.cpp:
#include "<ProjectName>.h"
#include "Modules/ModuleManager.h"
#include "Misc/PackageName.h"
#include "Misc/Paths.h"
// 类名任意
class FProjectNameModule : public IModuleInterface
{
public:
virtual void StartupModule() override
{
FPackageName::RegisterMountPoint(
TEXT("/MyData"),
FPaths::ProjectDir() / TEXT("MyData")
);
}
};
// 把自动生成的宏改成:
IMPLEMENT_PRIMARY_GAME_MODULE(FProjectNameModule, <ProjectName>, "<ProjectName>" );AddShaderSourceDirectoryMapping
为虚幻引擎的着色器编译器(Shader Compiler)建立了一个“虚拟根目录”,让引擎能够找到你存放在非标准路径下的 .usf 或 .ush 文件,如此便能通过#include 直接引用。
添加 RenderCore 依赖
/Source/<ProjectName>/<ProjectName>.Build.cs中的PublicDependencyModuleNames添加RenderCore- 关闭IDE,右键
<ProjectName>.uproject,执行Generate Visual Studio project files
使用方法
用法与FPackageName::RegisterMountPoint相同
#include "ShaderCore.h"
#include "Misc/Paths.h"
...
{
// 虚拟路径
FString VirtualPath = TEXT("/ProjectShaders");
// 真实路径
FString PhysicalPath = FPaths::ProjectDir() / TEXT("ProjectShaders");
AddShaderSourceDirectoryMapping(VirtualPath, PhysicalPath);
}最佳注册时机也是在StartupModule