UnityでのShader Variant設定方法

UnityEditorではちゃんと見えるのに、ビルドしてiOSで見たら見た目が違う！！みたいなことになって困ったことはないでしょうか？それはもしかしたらShader Vriantが設定されていないことから、ビルドに適切なShaderが含まれていないことが原因かもしれません。

# はじめに

ShaderVariantとはについては、[[Unity]ShaderVariantについて～前編：ShaderVariantとは？～](https://note.com/wotakuro/n/n48d40ec0f006) を読んでもらうとわかりやすいかと思います。

# 前提

- Mac
    - 試していませんが、Windowsでも同じ手順だと思います
- Unity 2021.2.11f1

# 手順

## 1. VariantのShader、Keywords取得

1. Frame Debugger（Window → Analysis → Frame Debugger）を起動します。
2. Enableを押します。
    ![Cursor_と_Menubar_と_Frame_Debug_と_UTJ_FrameDebugSave_UI_FrameEventDebugSaveWindow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/6130538f-ab46-a7ae-1b33-2bed7ca9669e.png)   
3. 追加したいオブジェクトが表示されるところを選択し、Shader、Keywordsを取得します。
該当箇所をクリックしてctr+c v で取得できます。
    ![Cursor_と_Frame_Debug_と_SampleScene_-_shader-variant_-_Windows__Mac__Linux_-_Unity_2021_2_11f1__Metal_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/cf512678-70cc-6be4-3b0f-c3ab94aaf144.png)
    ```
    Standard, SubShader #0
    DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN
    ```
4. 他のオブジェクト、他の部位などもある場合は、それぞれShader、Keywordsを取得しておきます。

## 2. Shader Variantsの設定を作成する

1. Create → Shader Variant Collectionを選択して、ShaderVariantsを作成します。
    1. 必要に応じてリネームしてください。
    2. 今回のアバターはStandardシェーダーを使っていたので、StandardShaderVariantsに変更しました。
2. Add shaderを押して追加したいShader Variantsのシェーダーを選択します。
    ![SampleScene_-_shader-variant_-_Windows__Mac__Linux_-_Unity_2021_2_11f1__Metal_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/36f932bb-33c1-54de-9f31-1eb025fdbce3.png)    
    1. 今回はStandardシェーダーを選択しています。
3. 右下にある＋を押してVariantsを追加します
    ![SampleScene_-_shader-variant_-_Windows__Mac__Linux_-_Unity_2021_2_11f1__Metal_ (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/ec11bcba-3840-7cf8-2e99-0bae21044dbb.png)
4. Variantsの選択
    1. Pick shader keywords to narrow down variant list: に表示されている項目から、1.3、1.4で取得したKeywordsの値を選びます。
    2. Selected keywordsに追加され、Shader variants with these keywords に表示されるVariantsがフィルタされます。
    3. Shader variants with these keywordsを選択します。
        1. クリックするとチェックがつきます。
        2. Keywordsと完全一致するものがない場合もありますが、その場合は次の手順(2.5)のテキストエディタで直接修正します
    4. Add 1 selected variants を押します
        1. 選んでいるvariantsの数によって1のところは変わります
    ![Add_shader_Standard_variants_to_collection_と_SampleScene_-_shader-variant_-_Windows__Mac__Linux_-_Unity_2021_2_11f1__Metal_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/e322f448-7e47-a35a-f44b-7cc1a3a892d3.png)
5. 4で選択できなかった場合、.shadervarinatsファイルをテキストエディタで開いて、直接Variantsの値を書き込みます。ここでは14行目にSHADOWS_SCREENを足しています。
    ![StandardShaderVariants_shadervariants_と_SampleScene_-_shader-variant_-_Windows__Mac__Linux_-_Unity_2021_2_11f1__Metal_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/5bb20d9b-b620-da45-597d-6e99068dd802.png)

## 3. ビルド時にShader Variantsを追加する設定
1. Project Settings → Graphics を開きビルドで追加したいプラットフォームを選択します。
2. Shader LoadingのPreloaded ShadersのSizeを1にして、Element 0に2で作ったVariantsを設定します。    
    ![SampleScene_-_shader-variant_-_Windows__Mac__Linux_-_Unity_2021_2_11f1__Metal_ (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/db1c3ac1-167a-7d76-7908-47247af16b05.png)