本当の初心者のためのUnity超入門　～UnityとRevitの連携編～

# はじめに
　本記事は、Unity初学者のための基本的な内容を一つずつ説明していくシリーズとして記載します。
　チートシートや、基本を勉強し始めた人の最初の概要理解に利用していただければ幸いです。
　
　なおこの記事では、UnityはあくまでゲームやVRコンテンツ等に動きを持たせる「機能」の部分を作成したり、モデル等を組み合わせてシーンを構築したりといった、オーサリングツールとしての役割を担うソフトという立場で記載していきます。
　モデルの作成等については他のツールで作成し、Unityに読み込むものという前提で読み進めてください。


# 利用するバージョン
本記事で扱うUnity及びRevitのバージョンは以下の通りです。

|ツール|バージョン|
|---|---|
|Unity|2019.10f1|
|Revit|2020.1|


# この記事について
　第2弾となる今回は建築業界での利用を想定して、Autodesk Revit（以下、Revit）との連携について記載をしていきます。
　基本的な連携方法のみを扱いますので、Unityから出されているUnity Reflect等に関する記載は行いません。
　また、簡単なマテリアル設定についても説明を行います。


# Revitからモデルを出力
　モデルはサンプルモデルの「RAC_basic_sample_project.rvt」を利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/0d19fabe-a424-0670-0157-0f7473b1235e.png)



　まずはRevitで作成したモデルをそのまま出力してみましょう。
　「ファイル」タブ＞「書き出し」＞「FBX」を選択し、任意の場所・ファイル名で保存します。
　「ファイルの種類」はデフォルト（FBX 2015および旧バージョン）のままで構いません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/f7b22a90-6c15-cff0-866a-e4fc6b989b7f.png)








# Unityにモデルを読み込む
　Revitから出力したfbxのモデルをUnityに取り込みます。
　Unityの3Dプロジェクトを作成してください。
　Unityでシーン構築を行うときは、再帰的利用を考え、利用するモデルやマテリアル、スクリプト等をプロジェクトのアセットに保管しましょう。
　保管する際の注意点については[第1弾](https://qiita.com/qulylean/items/d5809b9eb099294c7f8a#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E6%A7%8B%E6%88%90)で記載を行っていますので、参考にしてみてください。

　先ほど書き出したモデルを、アセットのModelsフォルダに格納します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/8b99d8f3-65cf-470b-0c56-267ce8aec564.png)

　次に、格納したモデルをヒエラルキー上に配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/d15eb812-18b1-8a9b-de97-25a0ec2c1699.png)

　シーン上にRevitのサンプルモデルが表示されるかと思います。


# マテリアルを設定する
　モデル自体は無事に読み込めましたが、読み込まれたモデルはマテリアルが設定されておらず、すべてグレーで表示されています。
　\* マテリアル付きで読み込みたい場合は、間に3dsMaxを挟んで書き出しを行います。

　今回はこのまま、ガラスのマテリアルを例に、簡単なマテリアルの設定方法について解説していきます。

## Revitで出力したFBXデータのヒエラルキー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/597e0ad5-a067-ceba-1d30-d636f4a1d5a8.png)

ヒエラルキー上のモデル名の左側にある「▶」をクリックすると、オブジェクトの構成が表示されます。
これを利用して、ガラスを利用するモデルを範囲選択し、まとめてマテリアルを設定することができます。


## マテリアルを作成
　まずはガラスのマテリアルを作成します。
　Materialsフォルダに移動後、プロジェクトウィンドウ内で右クリックし、「Create」＞「Material」を選択します。
　作成されたマテリアルに「glass」と名前を付けましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/653678db-a6b8-b5ff-b3e2-14159c1e33bb.png)

## マテリアルを編集
　作成したマテリアルを選択し、インスペクターウィンドウで編集を行います。

* 「Rendering Mode」を「Transparent」に変更
* 「Main Maps」の色を変更（透明度Aの値を30程度に下げる）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/c4f4656c-af10-129d-a75b-9d173a322725.png)



## マテリアルの割り当て
　細かい調整はご自身で行っていただくとして、さっそくオブジェクトにマテリアルを設定しましょう。

　ヒエラルキー上で「Single Window Standard」オブジェクトを全て選択します。
　探す際は、スクロールして一つずつ探してもいいですが、シーン上のオブジェクトを選択するとヒエラルキーでも選択されます。
　オブジェクトが見つかったら、Shift＋クリックで当該オブジェクトを全て選択しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/d7366bc9-09a0-5fb6-da8c-e7105b48b47e.png)

　オブジェクトを選択できたら、先ほど作成したマテリアルをインスペクターウィンドウにドラッグアンドドロップしましょう。
　**\* マテリアルをクリックしてしまうと、インスペクターの表示が変わってしまいますので、ボタンを上げずにドラッグしてください。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/fc92ac81-ba43-69af-8cf7-33ed2e9a4fda.png)

　対象のオブジェクトすべてが、透明になればOKです。


# 部分的にモデルを書き出す
　UnityとRevitのモデル連携フローは基本的に以上ですが、作成するアプリケーションによって書き出したいモデルの状態はそれぞれ異なるかと思います。
　ここからは、モデルを部分的に書き出す方法について、平面表示を例に説明していきます。


## 平面表示でモデルを書き出す
　RevitからUnityに書き出すFBXモデルは、Revitのビューの状態に準じさせることができます。
　「Revit上で非表示にしているオブジェクトは書き出しを行わない」「「切断ボックス」を利用して表示している断面の状態で書き出す」など様々な状態のモデルを書き出すことができます。

　これを利用して、今回は3Dモデルを平面図ルールに基づいて切断した状態で書き出します。

　3Dビューを表示し、ビューキューブの右下に表示される「∇」をクリックします。
　続けて、「ビューで方向指定」＞「平面図」＞「1FL」を選択すると、プロジェクトで設定されたレベル情報に基づいてビューが切断されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/36950058-2dc5-1743-3e31-a132cd8a995f.png)

　ビューが切断されますが、南東側の屋根と天井が残った状態となっていますので、「ビューコントロールバー」＞「要素を非表示」を使って2つとも非表示にしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/ae2428d2-2ede-d516-b766-4c9b0f7f09e0.png)

　先ほど同様にFBXでの書き出しを行うと、以下のメッセージが表示されるため、「一時的に非表示/選択表示モードを有効のままにして書き出し」を選択して下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/a314b694-3fe3-7d58-c0dd-6debaf19d21e.png)


# Unity上で平面モデルを扱う
　書き出したモデルを利用して、Unityで平面表示に関する設定を行っていきましょう。

## モデルの読み込み
　先ほど同様、アセットの「Models」フォルダに書き出したFBXデータを格納し、ヒエラルキーに配置します。
　先ほどRevitで切断した状態のモデルが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/fc64f9b2-8bac-f9c7-acfb-058dce7ccb20.png)


## カメラの設定
　マテリアルは適宜設定していただくとして、シーンを実行した際のカメラの設定を平面図に則したものに変更していきます。
　
　「Main Camera」を選択すると、シーン上でのカメラの位置と向き、プレビューが表示されます。
　今回はこのカメラの設定を以下のように変更します。

* カメラ位置の変更（モデルの真上に移動）
* カメラ角度の変更（真下を見下ろすように角度修正）
* 平行投影表示に変更

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/89fdcf05-3775-e32d-a283-77b4df98523b.png)

### カメラ位置の変更
　まずは位置から変更します。
　「Main Camera」を選択し、シーン上に表示されるドラッグを使ってモデルの真上までカメラを移動させましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/21c8b438-17e6-95db-257e-42b9f0dd0058.png)


### カメラ角度の変更
　次に、カメラの回転角をx, y, z それぞれ変更し、真上から見下ろしたビューにします（図では位置も微調整しています）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/5d8885eb-02d9-5bca-b21f-682c6e72c385.png)


### 平行投影表示に変更
　インスペクターから「projection」を「Orthographic」に変更します。
　変更すると視野角が変わるため「Size」を「15」に変更して、ビューを調整します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/a5beb795-5f1c-97e0-2e4a-0f4a7f02cb7a.png)



## シーンを実行してみる
　シーンの実行ボタンを押して、実際にアプリケーションを開始した際のビューを見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350776/0d30fd8e-2b24-aaa0-2534-bc6d0abd4228.png)


　影が入って少し見づらいですが、平行投影で平面の状態を表示できているかと思います。
　

# おわりに
　今回はモデリングツールとの連携の例として、Revitとのモデル連携について解説を行いました。

　今回扱った

* RevitからFBXデータの書き出し
* Unityへの読み込み
* Unityに読み込んだRevitデータの構成
* マテリアル編集
* カメラの設定

　については、アプリケーション開発を行う際の基本となる項目です。
　何を作る場合でも出てくる作業となるので、考えなくてもできるレベルで手になじませておきましょう。

　今回の内容は以上です。
　最後までご閲覧いただきありがとうございました。