Version: Unity 6.0 (6000.0)
言語 : 日本語
ランタイムにアクティブな URP アセットを変更する
URP Config パッケージを使用して設定を構成する

ランタイムに URP アセット設定を変更する

C# スクリプトを使用して、ランタイムに URP アセットのプロパティの一部を変更できます。これは、プロジェクト内のどの品質レベルとも完全に一致しないハードウェアを持つデバイスのパフォーマンスを微調整するのに役立ちます。

ノート: C# スクリプトで URP アセットのプロパティを変更するには、プロパティに set メソッドが必要です。これらのプロパティの詳細については、Universal Render Pipeline Asset 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. ChangeAssetProperties メソッドの呼び出しを Start メソッドに追加します。これにより、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 パッケージを使用して設定を構成する