UnityでAdaptivePerformanceについて調べたメモ

# この記事について
今回の記事は機能について調べた内容を記録できるように記事にしたものです。
この記事には間違った事や書かれていない内容もあると思いますので、コメントで教えていただけると幸いです。

# AdaptivePerformanceって何？

公式リファレンスでは、スマホの熱量や電力状態などの情報を取得出来るという記載があります。

https://docs.unity3d.com/ja/2022.1/Manual/com.unity.adaptiveperformance.html

# ダウンロード方法

UnityのテンプレートでMobileテンプレートを選ぶと最初からプロジェクトに入っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/9ad225b2-10d2-c8c9-ea5c-3596d8226f99.png)

また、PackageManagerからもダウンロードする事が出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/718ed8a9-8494-7c0e-a4ae-2ed8cb7eaf6b.png)

# 実行確認と設定を行う

AdaptivePerformanceが入っている状態で実行してみると以下のログが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/414b4b78-3bce-4c40-02cb-90276330dec3.png)
このログは、Adaptive Performanceの設定をして下さいという内容なので設定を行います。
今回はAndroidで２つ設定を行います。

> ① Edir -> Project Settings -> Player -> Other Settings

Frame Timing Statusにチェックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/a787f214-6f0f-21b6-f91b-45e27c5b7df5.png)

この項目の内容としては、以下の内容です。
・フレーム単位でデバッグを行いたい時
・動的解像度機能を利用する時
・Adaptive Performanceを利用する時

https://docs.unity3d.com/ja/2022.3/Manual/frame-timing-manager.html

> ② Edit -> Project Settings -> Adaptive Performance

設定は簡単で、ProvidersのSamsung Android Providerの項目にチェックを入れるだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/b1fde2a4-0e13-b32f-a8f1-9e27bec8c57c.png)
チェックマークを入れると自動的にダウンロードされます。

# デバッグ出来る環境を作って実機で確認する

下記の記事を参考にしています。

https://qiita.com/mrtm30/items/a33b31bb5d3e85f282dd

Unityのシーンにテキストを配置する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/1fa327f9-9f98-e524-112c-70afe2bd39e7.png)

次にデバック用のスクリプトを作ります。
このスクリプトでは、Adaptive Perfomanceに対応している実機かどうかを確認出来ます。
```C#
using UnityEngine;
using UnityEngine.AdaptivePerformance;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    [SerializeField] private Text debugText;
    private IAdaptivePerformance adaptivePerformance = null;

    // Start is called before the first frame update
    void Start()
    {
        adaptivePerformance = Holder.Instance;

        if(adaptivePerformance == null)
        {
            debugText.text = "Adaptive Performanceが存在しません";
            return;
        }

        // Adaptive Performanceがサポートされているか確認する
        if (!adaptivePerformance.Active) 
        {
            debugText.text = "Adaptive Performanceがサポートされていない端末です";
            return;
        }

        debugText.text = "Adaptive Performanceがサポートされている端末です";
    }
}

```

実行してみましたが、自分が持っているAndroidではサポートされていないという結果になってしまったので実機確認はここで終わろうと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/ebdac7ff-193f-704e-ab33-b7fd3dabb88c.png)

# Adaptive Performanceのまとめ
・スマホの熱量や電力状態を取得する事が出来る
・対応しているデバイスとしていないデバイスがある事

# Adaptive Performanceのpackageの消し方
:::note alert
開発途中の環境から削除するとエラーが沢山出るので、
開発が始まる時に削除をオススメします。
:::

エクスプローラー上からプロジェクトのフォルダーを探し、下記のjsonを編集します。
> プロジェクト名 -> Packages -> manifest.json

jsonからadaptiveperformanceに関連する内容を削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/d62173a5-46cd-7de1-f633-e84cc7386f37.png)

後は、AssetsからAdaptive Performanceに関連している物を削除したら終了です。

※追記
mobileテンプレートのプロジェクトから削除する時は、PackagesからAdaptive performanceを選びエクスプローラー上から削除する事で消す事が出来ます。フォルダー自体は残ってしまいますが削除は出来るみたいです。