# DegradationPreference

Sora Unity SDK で利用できる `DegradationPreference` 設定について説明します。

この設定を利用すると、帯域幅が不足した際に映像の劣化をどのように行うかを指定できます。

例えばプレゼンテーションのような動きのない映像では、 `MaintainResolution` を指定して解像度を優先することで、文字の読みやすさを保つことができます。

## 概要

`DegradationPreference` は映像配信中にネットワーク帯域が不足した場合の調整方針を制御します。

Sora Unity SDK では `Sora.Config.DegradationPreference` を設定することで、Sora へ希望する劣化方針を伝えることができます。

## 指定できる値

Sora Unity SDK が提供する `Sora.DegradationPreference` 列挙体は、以下の 4 種類です。

これらは Sora.cs で enum 型として定義されています。

- `Disabled`: 劣化方針を指定しません
- `MaintainFramerate`: フレームレートを優先的に維持し、解像度を下げます
- `MaintainResolution`: 解像度を優先的に維持し、フレームレートを下げます
- `Balanced`: フレームレートと解像度の両方をバランスよく調整します

## 利用方法

`Sora.Config.DegradationPreference` に列挙値を代入し、 `Sora.Connect(config)` を呼び出してください。

値を指定しない場合は未指定として扱われ libwebrtc デフォルトの挙動として MAINTAIN_FRAMERATE で動作します。

### 基本的な利用方法

最もシンプルな利用方法は接続時に `Sora.Config` に直接設定する方法です。

```csharp
var config = new Sora.Config()
{
    // その他の設定は省略
    // ここでは Balanced を指定しています
    DegradationPreference = Sora.DegradationPreference.Balanced
};
sora.Connect(config);
```

### Inspector で選択可能にする例

Sora Unity SDK Samples への実装を考慮した例を以下に示します。

ここでは enableDegradationPreference フラグを用意し、これが true の場合にのみ `DegradationPreference` を設定します。

また、Inspector で `DegradationPreference` を選択できるようにしています。

```csharp
// DegradationPreference を有効化するフラグ
// ここでは値なしを選択できるようにするために用意します
public bool enableDegradationPreference = false;
// Inspector で選択可能にしておき、デフォルトは Balanced にします
public Sora.DegradationPreference degradationPreference = Sora.DegradationPreference.Balanced;

// Soraインスタンスの宣言
Sora sora;

// Sora Unity SDK Samples の実装通り、ボタン押下で接続開始します
public void OnClickStart()
{
    InitSora();
    // Sora.Config インスタンスの生成
    var config = new Sora.Config()
    {
        // 省略
    };
    // enableDegradationPreference が true の場合のみ DegradationPreference を設定します
    if (enableDegradationPreference)
    {
        // Inspector で設定した値を利用します
        config.DegradationPreference = degradationPreference;
    }
    sora.Connect(config);
}
```
