C# スクリプトを使用して、ランタイムに URP アセットのプロパティの一部を変更できます。これは、プロジェクト内のどの品質レベルとも完全に一致しないハードウェアを持つデバイスのパフォーマンスを微調整するのに役立ちます。
ノート: C# スクリプトで URP アセットのプロパティを変更するには、プロパティに
setメソッドが必要です。これらのプロパティの詳細については、Universal Render Pipeline Asset API を参照してください。
以下の例では、品質レベルの変更セクションの QualityControls スクリプトと QualityController オブジェクトを使用し、機能を拡張してアクティブな URP アセットを探し、ハードウェアのパフォーマンスレベルに合わせてそのプロパティの一部を変更します。
QualityControls スクリプトを開きます。
スクリプトの最上部に using UnityEngine.Rendering と using UnityEngine.Rendering.Universal を追加します。
次に示すように、名前 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
}
}
下の図のように、アクティブなレンダーパイプラインアセットを 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;
}
}
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;
}
}
}
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 アセットプロパティを変更するこのメソッドを、品質レベルの変更と組み合わせて使用すると、ターゲットハードウェア設定ごとに品質レベルを作成する必要なく、システムごとにプロジェクトのパフォーマンスを微調整できます。