UnityGame/Library/PackageCache/com.unity.render-pipelines.universal/Editor/BuildProcessors/URPProcessScene.cs
2024-10-27 10:53:47 +03:00

65 lines
2.5 KiB
C#

using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace UnityEditor.Rendering.Universal
{
class URPProcessScene : IProcessSceneWithReport
{
public int callbackOrder => 0;
public void OnProcessScene(UnityEngine.SceneManagement.Scene scene, BuildReport report)
{
bool usesURP = false;
if (GraphicsSettings.defaultRenderPipeline as UniversalRenderPipelineAsset != null)
{
// ^ The global pipeline is set to URP
usesURP = true;
}
else
{
// ^ The global pipeline isn't set to URP, but a quality setting could still use it
for (int i = 0; i < QualitySettings.count; i++)
{
if (QualitySettings.GetRenderPipelineAssetAt(i) as UniversalRenderPipelineAsset != null)
{
// ^ This quality setting uses URP
usesURP = true;
break;
}
}
}
if (usesURP)
{
GameObject[] roots = scene.GetRootGameObjects();
foreach (GameObject root in roots)
{
Light[] lights = root.GetComponentsInChildren<Light>();
foreach (Light light in lights)
{
if (light.type != LightType.Directional &&
light.type != LightType.Point &&
light.type != LightType.Spot &&
light.type != LightType.Rectangle)
{
Debug.LogWarning(
$"The {light.type} light type on the GameObject '{light.gameObject.name}' is unsupported by URP, and will not be rendered."
);
}
else if (light.type == LightType.Rectangle && light.lightmapBakeType != LightmapBakeType.Baked)
{
Debug.LogWarning(
$"The GameObject '{light.gameObject.name}' is an area light type, but the mode is not set to baked. URP only supports baked area lights, not realtime or mixed ones."
);
}
}
}
}
}
}
}