在 Unreal Engine 里,“映射路径”(Virtual Path / Mount Point)通常和插件一起用,比如:

TEXT
/Plugin/MyPlugin/...
点击展开查看更多

在非插件环境(普通项目模块)里一样可以手动注册 Mount Point,核心就是调用 FPackageName::RegisterMountPoint,把一个虚拟路径映射到磁盘目录。

注册 Mount Point

CPP
#include "Misc/PackageName.h"
#include "Misc/Paths.h"

...
{
	// 虚拟路径
    FString VirtualPath = TEXT("/MyData");
    // 真实路径
    FString PhysicalPath = FPaths::ProjectDir() / TEXT("MyData");

    FPackageName::RegisterMountPoint(VirtualPath, PhysicalPath);
}
点击展开查看更多

效果:

TEXT

/MyData/Textures/T_Test  
<Project>/MyData/Textures/T_Test.uasset
点击展开查看更多

UE 就能通过 /MyData/... 访问资源。

最佳注册时机

模块的 StartupModule 会在引擎完全启动、资源开始大规模加载之前执行。

/Source/<ProjectName>/<ProjectName>.cpp

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 依赖

  1. /Source/<ProjectName>/<ProjectName>.Build.cs中的PublicDependencyModuleNames添加RenderCore
  2. 关闭IDE,右键<ProjectName>.uproject,执行Generate Visual Studio project files

使用方法

用法与FPackageName::RegisterMountPoint相同

CPP
#include "ShaderCore.h"
#include "Misc/Paths.h"

...
{
	// 虚拟路径
    FString VirtualPath = TEXT("/ProjectShaders");
    // 真实路径
    FString PhysicalPath = FPaths::ProjectDir() / TEXT("ProjectShaders");

    AddShaderSourceDirectoryMapping(VirtualPath, PhysicalPath);
}
点击展开查看更多

最佳注册时机也是在StartupModule

版权声明

作者: Cheyne Xie

链接: https://chaim.eu.org/posts/ca2c6a2c/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键