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.Rendering と using 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 パッケージを使用して設定を構成する