본문 바로가기

Unity

Unity: 코드레벨에서 사용중인 렌더 파이프라인 특정하기 1

 

GraphicsSettings.currentRenderPipeline API를 이용하면 현재 사용중인 렌더링 파이프라인 에셋을 가져올 수 있습니다. 하지만 빌트인 렌더러를 사용하고 있는 경우, URP나 HDRP 패키지를 임포트 하지 않아 스크립트에서 직접적으로 접근할 수는 없습니다.

 

using UnityEngine.Rendering.Universal;

if (GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset) {

}

 

이런 코드는 UnityEngine.Rendering.Universal 네임스페이스가 정의되지 않아 컴파일에러를 일으킬 가능성이 있습니다. 대신에 GetType()을 이용해 타입 이름을 가져와 확인하는 방식으로 대체하면 됩니다.

 

public enum ERenderPipeline
{
	BuiltIn,
	URP = 1,
	LWRP = 1,
	HDRP = 2,
	Custom = 3,
}

public static ERenderPipeline GetPipelineType()
{
	if (GraphicsSettings.currentRenderPipeline != null)
	{
		var assetType = GraphicsSettings.currentRenderPipeline.GetType();

		if (assetType.Name == "UniversalRenderPipelineAsset")
		{
			return ERenderPipeline.URP;
		}
				
		if (assetType.Name == "HighDefinitionRenderPipelineAsset")
		{
			return ERenderPipeline.HDRP;
		}

		if (assetType.Name == "LightWeightRenderPipelineAsset")
		{
			return ERenderPipeline.LWRP;
		}

		return ERenderPipeline.Custom;
	}
	else
	{
		return ERenderPipeline.BuiltIn;
	}
}

 

빌트인 렌더러는 렌더링 파이프라인 에셋을 사용하지 않으므로 비어 있다면 빌트인 렌더러입니다.

 

스크립터블 렌더 파이프라인을 수정해서 쓰고있지 않다면 Universal, HighDefinition, LightWeight 중의 하나일 것입니다. 다른 이름을 갖고 있다면 커스텀 파이프라인입니다.

 

 

더 다양한 방법 - HDRP/LWRP detection from Editor script - Unity Forum