Unity には複数のプリセットされた 品質設定 レベルがあり、プロジェクトに新しく追加することもできます。さまざまなハードウェア仕様に対応するために、これらのレベルと関連付けられた URP アセットを C# スクリプトから切り替えることができます。以下の例は、API を使用して品質設定レベルとアクティブな URP アセットを変更する方法と、ランタイムに URP アセットの特定の設定を変更する方法を示しています。
ノート: 品質設定と URP アセット設定は、ロード画面や静的メニューなど、ランタイムのパフォーマンスがそれほど重要でないタイミングでのみ変更してください。これらの変更は一時的ではあるものの、パフォーマンスに大きな影響を与えるからです。
各品質レベルは、URP アセットを使用して特定のグラフィックス設定の多くを制御します。品質レベルごとに異なる URP アセットを割り当て、ランタイムに切り替えることができます。
品質設定を使用して URP アセットを切り替えるには、品質レベルごとに異なる URP アセットを使用するようにプロジェクトを設定します。URP 3D サンプルシーンにはデフォルトでこの設定があります。
品質レベルごとに URP アセットを作成します。Project ウィンドウで右クリックし、Create > Rendering > URP Asset (with Universal Renderer) の順に選択します。
ノート: これらの手順は、2D レンダラーを使用する URP アセットにも有効です。
必要に応じて、新しい URP アセットを設定し、名前を付けます。
Project Settings の Quality セクションを開きます (Edit > Project Settings > Quality)。
各 URP アセットを品質レベルに割り当てます。これを行うには、Levels リストから品質レベルを選択し、Rendering > Render Pipeline Asset の順に移動して、その品質レベル用に作成した URP アセットを選択します。各品質レベルに対してこれを行います。
これで、ランタイムにプロジェクトの品質レベルによって URP アセットを変更する準備が整いました。
ランタイムに使用する品質レベルは、QualitySettings API を使用して変更できます。上記で作成した品質レベル設定を使用し、URP アセットと品質設定のプリセットを切り替えることができます。
以下の簡単な C# スクリプトの例では、ビルドされたプロジェクトを開くときにユーザーからの入力を必要とせずに、システムのグラフィックスメモリの合計を使用して適切な品質レベルを決定します。
QualityControls という名前の新しい C# スクリプトを作成します。
QualityControls スクリプトを開き、SwitchQualityLevel メソッドを QualityControls クラスに追加します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class QualityControls : MonoBehaviour
{
void Start()
{
}
private void SwitchQualityLevel()
{
}
}
以下に示すように、 SwitchQualityLevel メソッドに switch ステートメントを追加し、QualitySettings.SetQualityLevel() メソッドで品質レベルを選択します。
ノート: 各品質レベルには、Project Settings ウィンドウの品質セクションのリスト内の位置と一致するインデックスがあります。リストの一番上の品質レベルはインデックス 0 です。このインデックスは、プロジェクトのビルドバージョンのターゲットプラットフォームで有効になっている品質レベルのみをカウントします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class QualityControls : MonoBehaviour
{
void Start()
{
}
private void SwitchQualityLevel()
{
// Select Quality settings level (URP Asset) based on the size of the device's graphics memory
switch (SystemInfo.graphicsMemorySize)
{
case <= 2048:
QualitySettings.SetQualityLevel(1);
break;
case <= 4096:
QualitySettings.SetQualityLevel(2);
break;
default:
QualitySettings.SetQualityLevel(0);
break;
}
}
}
SwitchQualityLevel メソッドの呼び出しを Start メソッドに追加します。これにより、シーンが最初にロードされたときにのみ品質レベルが変更されます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class QualityControls : MonoBehaviour
{
void Start()
{
SwitchQualityLevel();
}
private void SwitchQualityLevel()
{
// Select Quality settings level (URP Asset) based on the size of the device's graphics memory
switch (SystemInfo.graphicsMemorySize)
{
case <= 2048:
QualitySettings.SetQualityLevel(1);
break;
case <= 4096:
QualitySettings.SetQualityLevel(2);
break;
default:
QualitySettings.SetQualityLevel(0);
break;
}
}
}
ビルドしたプロジェクトが起動時にロードする最初のシーンを開きます。
空のゲームオブジェクトを作成し、QualityController と名前を付けます。これを行うには、Hierarchy ウィンドウで右クリックして Create Empty を選択します。
Inspector で QualityController オブジェクトを開きます。
QualityControls スクリプトを QualityController にコンポーネントとして追加します。
これで、シーンがロードされると、QualityControls スクリプトの SwitchQualityLevel メソッドが実行されます。このメソッドはシステムのグラフィックスメモリの合計を検出し、品質レベルを設定します。品質レベルは、URP アセットをアクティブなレンダーパイプラインアセットとして設定します。
より複雑なシステムや確認手順を作成して、使用する品質レベルを決定することもできますが、基本的なプロセスは同じです。プロジェクトの開始時に、QualitySettings.SetQualityLevel を使用して品質レベルを選択し、そこからランタイムに使用するプロジェクトの URP アセットを選択するスクリプトを実行します。