// RenderingPipelineDefines.cs // https://gist.github.com/cjaube/944b0d5221808c2a761d616f29deaf49 using System.Collections.Generic; using System.Linq; using UnityEditor; using UnityEditor.Build; using UnityEngine.Rendering; [InitializeOnLoad] internal class RenderingPipelineDefines { enum PipelineType { Unsupported, BuiltInPipeline, UniversalPipeline, HDPipeline } static RenderingPipelineDefines() { UpdateDefines(); } /// /// Update the unity pipeline defines for URP /// static void UpdateDefines() { var pipeline = GetPipeline(); if (pipeline == PipelineType.UniversalPipeline) { AddDefine("UNITY_PIPELINE_URP"); } else { RemoveDefine("UNITY_PIPELINE_URP"); } if (pipeline == PipelineType.HDPipeline) { AddDefine("UNITY_PIPELINE_HDRP"); } else { RemoveDefine("UNITY_PIPELINE_HDRP"); } } /// /// Returns the type of renderpipeline that is currently running /// /// static PipelineType GetPipeline() { #if UNITY_2019_1_OR_NEWER if (GraphicsSettings.defaultRenderPipeline != null) { // SRP var srpType = GraphicsSettings.defaultRenderPipeline.GetType().ToString(); if (srpType.Contains("HDRenderPipelineAsset")) { return PipelineType.HDPipeline; } else if (srpType.Contains("UniversalRenderPipelineAsset") || srpType.Contains("LightweightRenderPipelineAsset")) { return PipelineType.UniversalPipeline; } else return PipelineType.Unsupported; } #elif UNITY_2017_1_OR_NEWER if (GraphicsSettings.renderPipelineAsset != null) { // SRP not supported before 2019 return PipelineType.Unsupported; } #endif // no SRP return PipelineType.BuiltInPipeline; } /// /// Add a custom define /// /// /// static void AddDefine(string define) { var definesList = GetDefines(); if (!definesList.Contains(define)) { definesList.Add(define); SetDefines(definesList); } } /// /// Remove a custom define /// /// /// public static void RemoveDefine(string define) { var definesList = GetDefines(); if (definesList.Contains(define)) { definesList.Remove(define); SetDefines(definesList); } } public static List GetDefines() { var target = EditorUserBuildSettings.activeBuildTarget; var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(target); var defines = PlayerSettings.GetScriptingDefineSymbols(NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup)); return defines.Split(';').ToList(); } public static void SetDefines(List definesList) { var target = EditorUserBuildSettings.activeBuildTarget; var buildTargetGroup = BuildPipeline.GetBuildTargetGroup(target); var defines = string.Join(";", definesList.ToArray()); PlayerSettings.SetScriptingDefineSymbols(NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup), defines); } }