【Blender To Unity】BlenderからUnityにモデルをインポートする方法

　BlenderからUnityにモデルをインポートするフローについての記事です。
　テクスチャやマテリアルが正しく反映されていない等、Unityにインポートした際、「思ってたんと違う」を無くす目的で書いています。

**【使用ツール】**
Blender 3.6
Unity 2022.3.22

# 【完成イメージ】

(Blender上でのシーン画面)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/3bf6bed8-4a4c-4f5d-d1b9-591c8c70f834.png)

↓

(Unity上でのシーン画面)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/5f046e12-8742-27d1-c439-83f366ba15df.png)
※面の向きによって、一部透明に見えているオブジェクトが存在します。この辺の設定部分については、下で解説します。

# 【準備】
　本記事の手順では、Blenderのコレクションごとにエクスポートを行います。
　理由としては、以下の記事を参照。

https://qiita.com/fuji_kyoto_kc/items/685e1dbded19bb43916c


### ①アウトライナー上でエクスポートするコレクションのみをアクティブにします。

例:
　まずは、「classroom」コレクションをエクスポートします(箱みたいなマークが書かれているのがコレクションです)。
　classroomと書かれているコレクションの横についているチェックボックスがオンになっている場合がアクティブ状態です(反対にチェックボックスがオフの場合、非アクティブになっています)。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/9d7ba7ec-10e3-9993-6976-174dd0fabcba.png)

### ②オブジェクトを結合します。
　オブジェクトはなるべく結合(ctrl+J)してからエクスポートするようにします。でなければ、下記画像のように多くのオブジェクトがEmpty内に格納されてしまい、作業がしづらくなります。

(結合せずにエクスポートした場合)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/c0262cf6-e40a-5544-5641-60626a751982.png)

↓

(結合してからエクスポートした場合)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/ca17d2fb-9e51-5bf3-99db-0fedd301b97d.png)

　オブジェクト数が少なくなり、管理しやすくなります。

　もっとも、後からモデルの一部のみを複製・移動させたい場合には、その部分を1つのオブジェクトとして残すようにしてください(私の場合、「classroom」コレクションのうち、「floor1」を複製して使用する予定だったため、それ以外の部分「frontwall」と分離してエクスポートしています)。

※必ずmodifierをすべて適用してから結合するようにしてください。mirrorやsubdivision surfaceを使用している場合は、結合するとオブジェクトの形が変になります。

### ③3Dビュー上でコレクション内のオブジェクトをすべて選択し、すべてのトランスフォーム値を適用します。

例:
オブジェクトをすべて選択↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/b4a6091a-6d53-1c5a-a739-bbe3fe7643b1.png)
(見やすいようにワイヤフレーム表示にしています)

ctrl+Aを押下して、All Transformをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/76256796-cda1-ad74-209e-825231e82a77.png)

(若しくは、画面上部のobject > Apply > All Transformの順にクリック)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/6e4c0514-6cf2-241b-82d4-caa0a1a25bbd.png)

成功すれば、左下に適用結果が出力され、オブジェクトについているピボットポイント(黄色い点)が中心に揃います。
↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/7ffd1c40-b04a-273b-383b-dc35319dfd95.png)

### ④面の向きを確認します
　画面右上のOverlayプルダウンから、Face Orientationのチェックボックスを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/15cab016-d595-e7a1-05fd-3e42d9a2e395.png)

　すると、下記画像のようになります。この画像のうち、赤く塗られている部分はUnity上で透明に描写されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/a56f91a3-b981-f886-8ed3-fe7e913c4314.png)

　正しく描写されるように、面の向きが正常になるように変更します。
　まず、面の向きを変更したいオブジェクトを選択し、編集モードにしてください。
　編集モードで面選択モード(ショートカットは、数値キーの3)にし、向きを変更する面を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/a24dbc64-3a77-b3cb-80ca-5caf1847830b.png)

　その状態で画面上部のメニューバーから、Mesh > Normals > Flipを選択します(ショートカットはalt + N)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/5147d027-53f2-23cb-9549-ec4bdc6abae9.png)

　下記画像のように、「プレイヤーから見える部分が」青くなっていれば問題ありません。私の作成したモデルの場合、天井上や柱の中身等はプレイヤーから見えなくていい部分なので、赤くなっています。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/399bdb27-d556-c786-49d7-c7c5f5220de8.png)


準備だけでかなり長かったですが、ここからが本題です。

※なお、本記事では【準備】において、結合 → Transform値の適用 → 面の向きの確認という順番で進めています。順番を変えて進めても良いですが、結合やTransform値の適用の際に面が裏返る場合があります。以下の記事で詳細について、説明しています。

https://qiita.com/fuji_kyoto_su/items/759a6e676f7ae0b93250

# 【手順】
### ①エクスポートするコレクション内のオブジェクトをすべて選択し、画面左上部のFile > Export > FBX(.fbx)の順でクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/bb8a33ed-1457-4c38-835d-0f540b7d1487.png)

### ②エクスポート設定を下記画像のようにします。

・PathModeをCopyにし、右側のEmbedTexturesをアクティブにします(Blender上でテクスチャを使用している場合、この設定をしなければ正しくエクスポートされません)。
・Limit toをSelected Objectsにする。選択しているオブジェクトのみがエクスポートされます。
・Object Typesからエクスポートするオブジェクトの種類を選択します。今回は、Meshだけエクスポートします。
　なお、Meshだけのエクスポートでマテリアルとテクスチャのエクスポートもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/226a9803-9576-d8ad-16b2-f01f4f8f296b.png)

### ③名前を付けて、Export FBXを押下します。

ここからUnityの画面に移行します。

### ④UnityのProjectタブ内でModels,Materials,Texturesの3つのフォルダを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/f67f21b5-87ab-ed1a-71cb-b22c04061d1c.png)

**【Tips】**
　フォルダの作成は、Projectタブで右クリック > Create > Folderで作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/1b38733a-99a7-2cf9-779d-53ed68ef6cbe.png)

### ⑤Modelsフォルダ内にエクスポートしたFBXファイルをドラッグアンドドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/f2757bd2-2a80-147e-891c-35382c0d7db3.png)

### ⑥ドラッグアンドドロップしたファイルを選択します。

### ⑦Inspector上でMaterialsタブを選択し、Textures欄のExtract Texturesを押下します。
　テクスチャを保存するフォルダを聞かれますので、先ほど作成したTexturesフォルダを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/06557b82-fd3a-51f9-3720-b3988ac709fe.png)

※下の画面で左側にある上矢印を押すと1つ上の階層(Assetsフォルダ)に戻れます。その中にTexturesフォルダを作成しているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/a832b138-0df5-599f-2379-1a1c1f031150.png)

**【Tips】**

テクスチャ抽出時に以下のポップアップが出た場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/21eadb2b-3955-0c97-2764-fd66fa74cf5d.png)

Fix Nowを押してください。
Normal Mapを使用したテクスチャを抽出した際に、出るポップアップです。
本来、Normal Mapをインポートした場合、以下画像のようにTexture TypeをNormal mapにする必要があります。上記のポップアップでFix Nowを押せばその設定を自動でやってくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/9b7bf4db-8996-919f-6245-27a3f237d227.png)


### ⑧MaterialsのExtract Materialsを押下し、Materialsフォルダを選択します。
※なお、テクスチャ→マテリアルという順番に抽出しなければ、バグります。順番に注意してください。

# 【トラブルシューティング】
①上記の通りに設定しても、テクスチャが抽出できない場合があります。その場合は、Blender上でテクスチャをBakeする必要があります。
以下の記事を参考にしてください。

https://qiita.com/fuji_kyoto_kc/items/5beee314d239ae59b811

②マテリアルのサイズがおかしい場合
Unity上で設定しなおす方法は以下の通りです。
Materialsフォルダから、修正したいマテリアルを選択します。
Inspectorの中のTillingの値をいじることで修正できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984019/a9b80385-d992-b301-45fb-0f04d22762fa.png)

# 【関連リンク】

https://qiita.com/fuji_kyoto_kc/items/685e1dbded19bb43916c

https://qiita.com/fuji_kyoto_kc/items/5beee314d239ae59b811