Unity で 3Dモデル を取り扱う上で単調になりがちな作業をまとめて処理してくれるツールを作成しました

##### 12/12(火) 機能を追加してVersion2.0になりました。

Unityを使って開発をしていると

 * 多くの3Dモデルを取り扱う
 * それらの3Dモデルに共通のルールを適用する(prefabに変換したり、AnimationClipを抜き取ったり、小ライダーを貼ったり...)

といったケースがあります。それらに一つ一つ対応していくのは大変で面倒臭いです。そのためそのような面倒臭い単純作業をいい感じにまとめて処理してくれるツールを作成しました。
https://github.com/TakuKobayashi/Unity3dModelControl
unitypackageにしたものをご希望でしたら、こちらからダウンロードしてください。
https://github.com/TakuKobayashi/Unity3dModelControl/releases
機能として以下の機能があります。

 * 3Dモデルファイル(FBXなど)をprefabに変換
 * 3Dモデルファイル(FBXなど)からAnimationClipを抽出
 * 3Dモデルファイルからサムネイル画像を作成
 * Asset(prefab,anim,画像ファイルなど)の参照をまとめてファイルに出力(asset, csv, json)
 * 3dモデルにColliderを貼り付けて、メッシュ情報から自動的にColliderの位置を調整

の処理をFileExportEditorならびにAttachColliderEditorという処理を実行して一括でファイルを出力したり、修正したりできる機能としてを作成しました。
よかったらぜひ「スター」や「いいね」をいただいたり、「シェア」して拡散していたっだけたらと思いますm(_ _)m

# 基本的な使い方
インストールが完了したら、MenuのToolsを選択すると<font color="#FF0000">AttachColliderEditor</font>と<font color="#FF0000">FileExportEditor</font>を選択することができます。
![tools_ss.png](https://qiita-image-store.s3.amazonaws.com/0/72596/51780c0a-15ad-d3fb-90a8-5689ea8e99ac.png)

## FileExportEditor
<font color="#FF0000">Tools->FileExportEditor</font> と選択すると以下のような画面が出力します。
![EditorWindow.png](https://qiita-image-store.s3.amazonaws.com/0/72596/db5ec0aa-3cea-af09-79a4-6c67f37f19d4.png)

### Export Mode(機能)
#### Convert To Prefab
3Dモデルファイル(FBXなど)をprefabに変換
![ezgif-3-563e1ed40a.gif](https://qiita-image-store.s3.amazonaws.com/0/72596/402aecff-fd30-ad10-ac9a-7ddd69957644.gif)

#### Dissociate AnimationClip
3Dモデルファイル(FBXなど)からAnimationClipを抽出
![ezgif-3-cca38c8c58.gif](https://qiita-image-store.s3.amazonaws.com/0/72596/c565b521-c2d1-837e-fd7d-1d96f90eb9af.gif)

#### CaptureSceneImage
3Dモデルファイルからサムネイル画像を作成
![ezgif-3-375a6b259c.gif](https://qiita-image-store.s3.amazonaws.com/0/72596/ec5aa9de-148b-5e68-9a57-2c4e38ecb49e.gif)

#### RegisterAssetsReference
Asset(prefab,anim,画像ファイルなど)の参照をまとめたものをファイルとして出力

 * assetファイル(ScriptableObject)にして出力する場合
![ezgif-3-125bb2e682.gif](https://qiita-image-store.s3.amazonaws.com/0/72596/f6cbc639-8e40-872d-a6b8-d9219982458a.gif)

 * CSVファイルとして出力する場合
![ezgif-3-6e7c90747d.gif](https://qiita-image-store.s3.amazonaws.com/0/72596/dd1f0994-2c4c-bf74-8665-5a6b8f2c687a.gif)

## AttachColliderEditor
<font color="#FF0000">Tools->AttachColliderEditor</font> と選択すると以下のような画面が出力します。
![AttachColliderEditor.png](https://qiita-image-store.s3.amazonaws.com/0/72596/3d402c52-5e66-f4c8-bc08-4d0fc81f0547.png)
このWindowでは3dモデルにColliderを貼り付けて、メッシュ情報から自動的にColliderの位置を調整することができるものになります。
![ezgif-3-2dbf96b6d6.gif](https://qiita-image-store.s3.amazonaws.com/0/72596/f2ed1393-3557-bbcc-9d2f-fb984f63376a.gif)

## 各項目の解説と操作の紹介
### FileExportEditor

 * <b><font color="#0000FF">Export Mode:</font></b> 現在実装されている以下の4種類の処理を選択できます
   * <b><font color="#00FF00">Convert To Prefab:</font></b> 3Dモデルファイル(FBXなど)をprefabに変換
   * <b><font color="#00FF00">Dissociate AnimationClip:</font></b> 
3Dモデルファイル(FBXなど)からAnimationClipを抽出
   * <b><font color="#00FF00">CaptureSceneImage:</font></b>　3Dモデルファイルからサムネイル画像を作成
   * <b><font color="#00FF00">RegisterAssetsReference:</font></b> Asset(prefab,anim,画像ファイルなど)の参照をまとめてファイルに出力(asset, csv, json)　
 * <b><font color="#0000FF">Search Root Directory:</font></b> 入力したPath以下に存在するファイル全てに処理を適用します。
 * <b><font color="#0000FF">Export Directory:</font></b> 指定したディレクトリに処理を実行した結果を出力します。出力されるファイル名は処理の対象となったファイルと同じ名前になります。
 * <b><font color="#0000FF">Distribute with the parent directory?:</font></b> ファイルを出力するとき、特定のルールに則ったディレクトリ構造で出力したいということが多くあると思います。その時はこのチェックボックスをチェックして実行すると指定したディレクト同じ構造でデータを出力します。
 * <b><font color="#0000FF">Refer hierarchy parent number:</font></b> Distribute with the parent directory?をチェックすると出てくる項目です。対象のファイルから見て、指定した階層の親ディレクトリと同じ名前のディレクトリを作成し、そのディレクトリにカテゴライズしたディレクトリにファイルを出力します。
 * <b><font color="#0000FF">Search File Extention:</font></b>Export ModeをConvert To PrefabまたはDissociate AnimationClipを選択した場合に出現します。処理を実行したい3dモデルのファイルの形式を選択することができます。
 * <b><font color="#0000FF">Capture Image Width, Height:</font></b>Export ModeをCapture Scene Imageを選択した場合に出現します。Thumbnailとして出力したい画像のサイズを指定できます。
 * <b><font color="#0000FF">Export File Extention:</font></b>Export ModeをCapture Scene Imageを選択した場合に出現します。Thumbnailとして出力したい画像のファイルの種別を指定できます。
 * <b><font color="#0000FF">Execute:</font></b>設定された内容でColliderを超せして貼り付けます。

### AttachColliderEditor

 * <b><font color="#0000FF">Attach Mode:</font></b> Colliderの位置を自動的に調整するときの基準となる計算方法を選択できます。
   * <b><font color="#00FF00">WiddestSize:</font></b> 3Dモデルがぴったり収まるような大きさに調整したColliderを貼りつけます
   * <b><font color="#00FF00">MaxVolumn:</font></b> 3Dモデルを構成するパーツの中でもっとも大きいパーツがぴったり収まるような大きさのColliderを貼りつけます

 * <b><font color="#0000FF">Filter Mesh Renderer Type:</font></b> 大きさを見るMeshのタイプを指定します。(Mesh RendererかSkinnned Mesh Rendererか両方か)
 * <b><font color="#0000FF">Attach Collider Type:</font></b> 貼り付けたいColliderのタイプを指定します。(BoxCollider, Capsule Colliderなど)
 * <b><font color="#0000FF">Execute:</font></b>設定された内容でColliderの位置を調整して貼り付けます。

詳しくはGithubのプロジェクトで実際に試してみてください。

# 機能の詳細な解説
## 機能1: 3Dモデルファイルをprefabに変換
Unityで3Dモデルファイル(FBXなど)を読み込むとこんな感じになると思います。
![ScreenShot1.png](https://qiita-image-store.s3.amazonaws.com/0/72596/6711a484-4d46-2a0f-5c32-9cb026011ca9.png)
これはprefabではないので、Unity上でいろいろと制御するためには

 * Hierarchyにドラッグ&ドロップ
 * Hierarchyからドラッグ&ドロップして、prefabに直す

ということをしなければいけないのですが、
数が多かったり、よく変更されるとめんどくさいわけで、ここにフォルダ構造とかも考慮しないといけなくなったりするとこんなことやり続けるのはもうめんどくさくて仕方がないのです。
なので、便利でいい感じにやってくれるためのものを作りました。

## 機能2: 3DモデルファイルからAnimationClipを抽出
Unityで3Dモデルファイル(FBXなど)を読み込んだ場合、モーションなどのアニメーションも内蔵されていることがあります。
![ScreenShot2.png](https://qiita-image-store.s3.amazonaws.com/0/72596/1e971669-f71e-8aeb-0a0b-1d712cfaecd9.png)

このなかにあるAnimationClipファイルを取り出し、編集、制御できるようにするためには
http://tsubakit1.hateblo.jp/entry/2015/06/01/235939

 * FBX内の.animファイルを選択し<font color="#FF0000"><b>Ctrl(Command)＋D</b></font>

ということをして抽出するのですが、こちらもやはり数が多かったり、よく変更されるとめんどくさいので、いい感じにやるためのものを作りました。
【参考】http://tsubakit1.hateblo.jp/entry/2015/06/01/235939

## 機能3: 3Dモデルファイルからサムネイル画像を作成
3Dモデルファイルはある。これをUIでうまく使ったり、どんな感じのものなのか見せたい、しかし別にデザイナーさんに頼んでアイコンを作ってもらうほどでもない、というケースがあるのではないかと思います。
そんな時はとりあえずそれらしい、画像を自動的にそれらしい画像を3Dモデルから取得できるようにしました。
【参考】 https://qiita.com/kuuki_yomenaio/items/16577f32792da9eac17b

## 機能4: Asset(prefab,anim,画像ファイルなど)の参照をまとめてファイルに出力
3Dモデルなどのファイルを扱う場合、数が多くなり、それをうまく扱えるようなものを作ることになると思います。そのとき、それらのデータを管理するのがassetファイルやExcelになってきます。(いわゆる<font color="#FF0000">マスターデータ</font>)
マスターデータを管理するとき、ファイルの参照(あるいは特定のルール)を設定するのですが、データの入力は基本的に手動で行うことが多いです。手動ですと数が多いとめんどくさいですし、ミスも起こります。そのため、それらをうまく自動化してみたものがこの機能になります。
(※ただし、最適なやりかたは模索中なので、ご意見などいただけると幸いです)

## 機能5: 3dモデルにColliderを貼り付けて、メッシュ情報から自動的にColliderの位置を調整
3dモデルにCollider(衝突判定の膜)を貼り付ける場合基本的に手動で貼り付けていきます。一つ一つ手作業でやっていく場合数が多くなると非常にめんどくさいです。一応、Colliderを貼り付けるときは一定の方針があるはずなので、多くの場合に適応できるだろう方針の基、自動的に計算して、処理を適用できるものを作ってみました。

# その他、備考
 * 今回、サンプルで使用した3Dモデルはこちらから拝借しました。https://free3d.com/3d-model/black-dragon-rigged-and-game-ready-92023.html
 * サンプルの3Dモデルもいくつか製作していただき組み込みました。

# 関連記事
 * [ARCore 取扱説明書](https://qiita.com/taptappun/items/a5337d29a43d5d673c7f)
 * [Unity で ARKit & ARCore AR開発環境のマルチプラットーフォーム(iOS & Android)対応](https://qiita.com/taptappun/items/bc38a446a06c83bd1898)