Version: Unity 6.0 (6000.0)
언어 : 한국어
런타임 시점에 활성 URP 에셋 변경
URP Config 패키지를 사용해 설정 구성

런타임 시점에 URP 에셋 설정 변경

C# 스크립트를 사용하여 런타임 시점에 URP 에셋의 일부 프로퍼티를 변경할 수 있습니다. 이를 통해 프로젝트의 품질 레벨과 완전히 일치하지 않는 하드웨어가 탑재된 기기에서 성능을 미세 조정할 수 있습니다.

참고: C# 스크립트를 통해 URP 에셋의 프로퍼티를 변경하려면 해당 프로퍼티에 set 메서드가 있어야 합니다. 이러한 프로퍼티에 대한 상세 내용은 유니버설 렌더 파이프라인 에셋 API를 참조하십시오.

다음 예제에서는 품질 레벨 변경 섹션의 QualityControls 스크립트와 QualityController 오브젝트를 사용하며, 해당 기능을 확장하여 활성 URP 에셋을 찾고 하드웨어의 성능 레벨에 맞게 일부 프로퍼티를 변경합니다.

  1. QualityControls 스크립트를 엽니다.

  2. 스크립트 상단에 using UnityEngine.Renderingusing UnityEngine.Rendering.Universal을 추가합니다.

  3. 아래와 같이 이름이 ChangeAssetProperties이고 유형이 void인 메서드를 QualityControls 클래스에 추가합니다.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Rendering;
    using UnityEngine.Rendering.Universal;
    
    public class QualityController : MonoBehaviour
    {
        void Start()
        {
            // Select the appropriate Quality Level first
            SwitchQualityLevel();
        }
    
        private void SwitchQualityLevel()
        {
            // Code from previous example
        }
    
        private void ChangeAssetProperties()
        {
            // New code is added to this method
        }
    }
    
  4. 아래와 같이 GraphicsSettings.currentRenderPipeline을 사용하여 활성 렌더 파이프라인 에셋을 검색합니다.

    참고: 스크립트가 올바르게 작동하려면 as 키워드를 사용하여 렌더 파이프라인 에셋을 UniversalRenderPipelineAsset 유형으로 캐스팅해야 합니다.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Rendering;
    using UnityEngine.Rendering.Universal;
    
    public class QualityController : MonoBehaviour
    {
        void Start()
        {
            // Select the appropriate Quality Level first
            SwitchQualityLevel();
        }
    
        private void SwitchQualityLevel()
        {
            // Code from previous example
        }
    
        private void ChangeAssetProperties()
        {
            // Locate the current URP Asset
            UniversalRenderPipelineAsset data = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
    
            // Do nothing if Unity can't locate the URP Asset
            if (!data) return;
        }
    }
    
  5. ChangeAssetProperties 메서드에 switch 문을 추가하여 URP 에셋 프로퍼티의 값을 설정합니다.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Rendering;
    using UnityEngine.Rendering.Universal;
    
    public class QualityController : MonoBehaviour
    {
        void Start()
        {
            // Select the appropriate Quality Level first
            SwitchQualityLevel();
        }
    
        private void SwitchQualityLevel()
        {
            // Code from previous example
        }
    
        private void ChangeAssetProperties()
        {
            // Locate the current URP Asset
            UniversalRenderPipelineAsset data = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
    
            // Do nothing if Unity can't locate the URP Asset
            if (!data) return;
    
            // Change URP Asset settings based on the size of the device's graphics memory
            switch (SystemInfo.graphicsMemorySize)
            {
                case <= 1024:
                    data.renderScale = 0.7f;
                    data.shadowDistance = 50.0f;
                    break;
                case <= 3072:
                    data.renderScale = 0.9f;
                    data.shadowDistance = 150.0f;
                    break;
                default:
                    data.renderScale = 0.7f;
                    data.shadowDistance = 25.0f;
                    break;
            }
        }
    }
    
  6. Start 메서드에서 ChangeAssetProperties 메서드에 대한 호출을 추가합니다. 이렇게 하면 씬이 처음 로드될 때만 URP 에셋이 변경됩니다.

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Rendering;
    using UnityEngine.Rendering.Universal;
    
    public class QualityController : MonoBehaviour
    {
        void Start()
        {
            // Select the appropriate Quality Level first
            SwitchQualityLevel();
    
            // Fine tune performance with specific URP Asset properties
            ChangeAssetProperties();
        }
    
        private void SwitchQualityLevel()
        {
            // Code from previous example
        }
    
        private void ChangeAssetProperties()
        {
            // Locate the current URP Asset
            UniversalRenderPipelineAsset data = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
    
            // Do nothing if Unity can't locate the URP Asset
            if (!data) return;
    
            // Change URP Asset settings based on the size of the device's graphics memory
            switch (SystemInfo.graphicsMemorySize)
            {
                case <= 1024:
                    data.renderScale = 0.7f;
                    data.shadowDistance = 50.0f;
                    break;
                case <= 3072:
                    data.renderScale = 0.9f;
                    data.shadowDistance = 150.0f;
                    break;
                default:
                    data.renderScale = 0.7f;
                    data.shadowDistance = 25.0f;
                    break;
            }
        }
    }
    

이제 이 씬이 로드되면 Unity는 시스템의 총 그래픽스 메모리를 감지하고 그에 따라 URP 에셋 프로퍼티를 설정합니다.

이러한 방식으로 URP 에셋 프로퍼티와 품질 레벨을 변경하면 모든 타겟 하드웨어 설정에 대한 품질 레벨을 생성하지 않고도 다양한 시스템에 맞게 프로젝트의 성능을 미세 조정할 수 있습니다.

런타임 시점에 활성 URP 에셋 변경
URP Config 패키지를 사용해 설정 구성