[Unity]テクスチャがうまく表示されない時の対処法

# はじめに
Unity初心者あるある。
Blenderなどで作った3DモデルをUnityで使おう！と思ったらマテリアルが適用されず真っ白になったり、バグったみたいに真っピンクになってしまうアレ。
その解決方法を私の知っている限り紹介します。

## 実行環境
:::note info
基本はUnity2021以降を想定しています。
:::
記事内ではWindowsでUnity2022 3.5を使用しています。

## 真っ白の場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/4bb70c7c-dcfe-0c47-d1b7-f545f0afbbf0.png)
    <dd>blenderで作成したモデルをいざ投入！と思いきや...</dd>
この状態は、**マテリアルに割り当てられているテクスチャ画像の参照がうまくいっていない** 状態です。要するにテクスチャ画像をAssetにimportし忘れています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/65cb9e10-39b0-4ee5-3d80-f948d36089b9.png)

上手くいけばテクスチャ画像をAsset内にimportするとすぐに反映されます。
上手くいかない場合は、Asset内のテクスチャ画像をシーン内のモデルの対象パーツにドロップ&ドロップすると、色が反映されます。このとき、忘れずPrehab化しておきましょう。

:::note warn
テクスチャ画像はWebpなどの拡張子だと使えません。
jpg・png・tgaなどに変換しておきましょう。
:::

## テクスチャを入れたのにピンクになっている場合
![スクリーンショット 2024-05-30 001748.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/8a542d28-af25-adf0-0cfd-967cb6dd61da.png)
<dd>テクスチャを入れてるのに、バグってピンクになってしまった</dd>

### まずは確認
対象のオブジェクトのインスペクター内のMaterialタブのLocationをチェック。
(インスペクターとは、オブジェクト設定画面みたいなやつ、Asset内のPrehab or fbxをクリックすると画面右に出てくるタブのこと)
![スクリーンショット 2024-05-30 001351.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/ae514aec-d9e9-6d2b-da43-9373458b6447.png)
もし画像のように __Use External Materials(Legacy)__ になっている場合、これが原因です。これは、外部ディレクトリ内を参照しますよ！という設定を示しています。つまり、参照対象のフォルダがないのです。

前述の真っ白な場合と同様に、テクスチャ画像を対象のオブジェクトのパーツにドラッグ&ドロップすると、自動的にMaterialだけでなくそれを格納するフォルダも作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/c222ffca-6900-a31e-2b40-aa69941d0d11.png)

このとき、Prehabのテクスチャは変わっていないので、Prehab化を忘れずに！

## ModelのMaterialが全てピンクになっている場合
ウェブサイトでダウンロードしたモデルなどでよく起こります。
原因はレンダリングの方式にあり、URP方式に変換することで正しく表示されるようになります。そのために使える手段を 2 (+1) 種類紹介します。

### 一発で直る可能性のある方法
Project画面上でピンク化したMaterialを選択し、Edit > Rendering > Materials > Convert Selected Built-in Materials to URPをクリックすると選んだマテリアルがURPに変換されます。

![スクリーンショット 2024-05-30 005130.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/8d35a9ba-6e26-da0f-0d9a-51c27651aed1.png)

うまくいくと次のような画面が表示されるので、Proceedをクリック。

![スクリーンショット 2024-05-30 005233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/da72d745-b7eb-4a2e-6f14-ca43d3db8df5.png)


### URP Converter を使う方法
上手くいかない場合は、Window > Rendering > Render Pipeline Converter
![スクリーンショット 2024-05-29 233831.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/d2468b61-eedb-9577-3569-930018b67ee6.png)

クリックするとポップアップが表示されるので、**一番上のプルダウンボックス内がBuilt-in to URP**になっていることを確認して、MaterialUpgradeにチェックを入れて、下部のinitialize Convertersをクリック。
その後同じ箇所に表示されるConvert Assetsをクリックすると変換される。

![スクリーンショット 2024-05-30 010208.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/0823a329-77cb-86f3-2b54-5429d1299c47.png)

### それでも直らない場合は
Materialのシェーダーを確認しましょう。

![スクリーンショット 2024-05-30 011029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/54a47b75-cad4-172e-ecbd-e8654a8f490a.png)

もしかしたらStandardなどのShaderが適応されているかもしれません。これがURPに対応していないので、うまく表示されません。Shader > Universal Render Pipeline > Litに設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786217/44fe05f4-d418-1a0a-84b5-0f940fe0e31c.png)

適応部分がうまく反映されました

## まとめ
<dl>
    <dt>白い場合</dt>
    <dd>まずはテクスチャ画像があるか確認する。Asset内にあれば対象モデルにドラッグ&ドロップするとたいていは直る</dd>
    <dt>ピンクの場合</dt>
    <dd>・簡易コンバータを使用する</dd>
    <dd>・URPコンバータを使用する</dd>
    <dd>・Shaderを確認する
</dl>