主要是对官方文档的一个补充:虚幻引擎插件中的 Shader | 虚幻引擎 5.6 文档 | Epic Developer Community
添加虚拟源文件路径
查看代码
void FYKComputeModule::StartupModule()
{// 查找插件TSharedPtr<IPlugin> Plugin = IPluginManager::Get().FindPlugin("YKCompute");if (!Plugin.IsValid()){UE_LOG(LogTemp, Error, TEXT("YKCompute plugin not found!"));// 列出所有可用插件以调试TArray<TSharedRef<IPlugin>> AllPlugins = IPluginManager::Get().GetDiscoveredPlugins();for (const TSharedRef<IPlugin>& AvailablePlugin : AllPlugins){UE_LOG(LogTemp, Warning, TEXT("Available plugin: %s"), *AvailablePlugin->GetName());}return;}// 获取基础目录FString PluginBaseDir = Plugin->GetBaseDir();// 检查基础目录是否存在if (!FPaths::DirectoryExists(PluginBaseDir)){UE_LOG(LogTemp, Error, TEXT("Plugin base directory does not exist: %s"), *PluginBaseDir);return;}// 组合路径FString PluginShaderDir = FPaths::Combine(PluginBaseDir, TEXT("Shaders"),TEXT("Private"));// 检查着色器目录是否存在if (!FPaths::DirectoryExists(PluginShaderDir)){UE_LOG(LogTemp, Error, TEXT("Shader directory does not exist: %s"), *PluginShaderDir);return;}// 映射着色器目录AddShaderSourceDirectoryMapping("/Plugin/YKCompute/Shaders/Private", PluginShaderDir);
}
这里有个注意的点,从添加映射器目录的内部可以知道目录是没什么用的,只是使用的时候要用对应的路径比如我把第一个参数设置为"ABC"。
IMPLEMENT_SHADER_TYPE(,FCompute, TEXT("/ABC/Compute.usf"), TEXT("CSMain"), SF_Compute);
导入的时候也用ABC一样是可以用的,这里不是说可以乱填,而是不必那么严谨,被这个玩意儿坑了点时间。