Files
Test/Library/PackageCache/com.unity.render-pipelines.universal@ffe395a3a1d1/Editor/Tools/Project Auditor/RendererAssignmentValidation.cs
T
2026-11-01 23:39:55 +02:00

77 lines
2.7 KiB
C#

using System.Collections.Generic;
using System.ComponentModel;
using Unity.ProjectAuditor.Editor;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace UnityEditor.Rendering.Universal.ProjectAuditor
{
[Category("URP Assets")]
class NoRendererAssignedAnalyzer : IRenderingSettingsAnalyzer
{
internal const string URP0002 = nameof(URP0002);
public Descriptor Descriptor { get; } = new Descriptor(
URP0002,
"URP: URP Asset has no renderer assigned",
Areas.Quality,
"One or more Universal Render Pipeline assets have no renderers assigned. Without a renderer, the pipeline cannot render anything and will result in a blank screen or errors.",
"Assign at least one renderer to each URP asset in Graphics and Quality Settings"
)
{
DefaultSeverity = Severity.Major,
};
private bool CheckRenderers(UniversalRenderPipelineAsset urpAsset)
{
bool allHaveRenderers = true;
if (urpAsset.m_RendererDataList == null || urpAsset.m_RendererDataList.Length == 0)
{
allHaveRenderers = false;
}
else
{
// Check if all entries are null
bool hasValidRenderer = false;
foreach (var renderer in urpAsset.m_RendererDataList)
{
if (renderer != null)
{
hasValidRenderer = true;
break;
}
}
if (!hasValidRenderer)
allHaveRenderers = false;
}
return allHaveRenderers;
}
public IEnumerable<RenderingSettingsIssue> EnumerateIssues()
{
if (GraphicsSettings.defaultRenderPipeline is UniversalRenderPipelineAsset urpAsset)
{
if (!CheckRenderers(urpAsset))
yield return new RenderingSettingsIssue(URP0002);
}
using (UnityEngine.Pool.ListPool<(int level, string name)>.Get(out var tmp))
{
QualitySettings.ForEach((level, name) =>
{
if (QualitySettings.renderPipeline is UniversalRenderPipelineAsset qualityUrpAsset)
{
if (!CheckRenderers(qualityUrpAsset))
tmp.Add((level, name));
}
});
foreach (var (level, name) in tmp)
yield return new RenderingSettingsIssue(URP0002, level, name);
}
}
}
}