虚幻5.6插件添加自定义shader

 主要是对官方文档的一个补充:虚幻引擎插件中的 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一样是可以用的,这里不是说可以乱填,而是不必那么严谨,被这个玩意儿坑了点时间。

posted @ 2025-09-30 14:18  过往云烟吧  阅读(17)  评论(0)    收藏  举报