この記事読む前に
決して「サクッと動かせたよ」っていう記事じゃないんで。はい。
Fusion360のモデルをUnityにインポートすると
FBXに書き出して実際にインポートしてみると、なんかへんな親オブジェクトなどが
できてすごい扱いづらいんですよね。
こんな感じで。
プログラムで取得したいのは、この一番下の子のBody1
というオブジェクト。
コンポーネントの名前とか、保存したときにつくバージョン名とかでFBXを更新するたびに名前がころころ変わるので、Unityのスクリプトで制御するのはめんどくさい。
今回は、それを解決すべく、いろいろ検証していきます。
ソフトバージョン
Fusion360 2.0.8412
Unity 2019.3.7f1
検証結果
単刀直入に結果を知りたい人が大半だと思うので、先に結果を書きます。
結果は...
Fusion360はUnity向けではない!!!
はい。残念な結果ですね。
おとなしくBlenderとかを使えという結果になりました泣
検証の様子を見たい人は下記をご覧ください。
人生に失望した方はAlt+F4
でウィンドウを閉じてください。
いろいろ検証してみよう!!
いろんなパターンで検証してみました。
パターン00:ただの円柱
ただの円柱をFusion360で作成し、fbxで書き出してUnityでインポートする。
Fusion360
こんな感じで、直径1m、高さ2mの円柱を作成した。(デザイン>基準フィーチャソリッド>作成>円柱)
Unity
Unityでインポートしたところ特別変なところはない。
きちんとxyz軸も同じようにインポートできるし、スケールもそのままインポートできる。
Hierarchyタブでこのモデルを見ると、このような感じになっている。
Modelの名前はBody1
、Fusion360ではボディ1
となっているので、デフォルトでできたモデルの名前はボディ1
からBody1
に変更される模様。
次は、このモデルの名前を変更してみる。
※モデルの名前が変えれることにあとから気づいたのでパターン名が00-1となっててごめんなさい。
パターン00-1:モデルの名前を変更してみる
パターン00のモデルの名前を変更してみた。
念のため、日本語と英語の両方のモデルを作った。
Fusion360
2つのボディ円柱
とcylinder
の2つを作った。
Unity
cylinder
と円柱
の2つのモデルが出来ましたね。
どこかでFBXはマルチバイト文字に対応してないとか聞いてたけど、何とかなるみたいですね。
なので、モデルを2つに増やしてみる。
パターン01:円柱と球
モデルを円柱と球の2つにしてみた。
Fution360
球は直径1mで作成した。(デザイン>基準フィーチャソリッド>作成>球)
ボディ名はボディ1
とボディ2
となる模様
Unity
Hierarchyタブを見ると、下のようにBody1
とBody2
があります。
まぁ、ここまでは想像通りですね。
次は、ボディをコンポーネントに変更してみましょう。
パターン02:コンポーネント化された円柱
パターン00で作った円柱をコンポーネントにしてからfbxにしてみましょう。
Fusion360
パターン00のボディを右クリックして「ボディからコンポーネントを作成」を押して作成したコンポーネントです。
コンポーネントの名前はコンポーネント1:1
、中身のボディの名前は、コンポーネント化する前と変わらずボディ1
でした。
Unity
インポートしたところ、Hierarchyは下のようになりました。
※インポートしたときの3dViewは特に面白いところもないのでこれからは省きます。
- Component1:1
- Component1
- Body
- Component1
こんな風に、ボディからコンポーネントにしただけでBody1
の親オブジェクトが2つも増えましたね。
それも同じような名前のw
この謎を解明する前に、もう一つ。
パターン03:コンポーネント化された円柱
パターン02と似ているが、ファイル内のボディをコンポーネント化したのではなく、パターン00のファイルをD&Dでインポートすることでコンポーネント化する。
Fusion360
パターン02とは異なり、コンポーネント名がパターン00のファイル名である00 v4:1
となっている。
Unity
インポートしたところ、
- 00 v4:1
- 00 v4
- Body1
- 00 v4
というような構造になっている。
こういう、オブジェクト名にバージョンが入ると、スクリプトで取得できない(FBXを更新するときに名前が変わっちゃう)からめんどくさいよね…
はい次。
パターン04:D&Dで円柱を2つコンポーネント化する
パターン03のファイルにもう一回D&Dで円柱のファイルをインポートする。
Fusion360
このように2つのコンポーネント00 v4:1
と00 v4:2
が出来ました。
これで、コロンの後の数字はインポートしたコンポーネントが被ったときに増える数字でしたね。
Unity
想像を絶する階層構造です。
1つ目のコンポーネントはパターン03と同じだけど、2つ目のコンポーネントの構造が
- 00 v4:2
- 00 v4 1
- Body 1
- 00 v4 1
となっていて、なんか後ろに半角スペースを空けて1の数字が入ってますね。
こりゃあなんとも意味不明な構造だ。
パターン05:パターン02をD&Dでコンポーネント化してみる。
パターン03,04はパターン00のファイルをD&Dでコンポーネント化しました。このパターン00はボディのままのモデルでした。
なので、パターン02のファイル。つまりコンポーネントされたモデルが含まれたファイルをD&Dでインポートするとどうなるのかをやってみます。
Fusion360
うん。はい。普通にコンポーネントの入れ子になっただけですね笑
さらに複雑になった感じですw
一応Unityも
Unity
うん。まぁ想像通りの親オブジェクトのオンパレードw
絶対やめた方がいいw
パターン06:プロパティ
Fusion360のコンポーネントやボディには「プロパティ」というものがあります。
そこにパーツ番号とパーツ名、説明があります。
これが変更出来たら!!と思ったけど、変更できるものは限られてるんですよね…
具体的にはパターン02の時だけで、ファイル内でボディをコンポーネントに変換したものだけ、コンポーネントのプロパティが変更できるようです。
はいくそ~。
まとめ
やっぱりモデリングしようと思うとBlenderとかそっち系のモデリングソフトが必要ですね。
Fusion360とかは設計系だから、寸法とかもきちっと設定できて作りやすいから、Fusion360で作ったモデル(ロボットとか)をサクッと動かせたらいいなと思ってこの記事を書いてました。
だけど、検証していくうちにだんだんと可能性がなくn...
Blenderとか勉強しよっと。
さいごに一言
個人的なプロジェクトでヤマハの電子オルガン「エレクトーン」ってやつをモデリングしてるんですけど、鍵盤を作っただけでHierarchyがこんな感じに。
これでもまだまだ展開しきれてない項目があります。
今はこれの鍵盤をMIDI入力で動かそうとしてるんですけど、こんなオブジェクト名GameObject.Find()
で取得できるかい!!!!
FBXがこれで確定ならいいけど、まだ足鍵盤とかパネルとかモデリングしないといけないからどんどん更新されてくし、そのたびにこのバージョンの名前変わってくし、あーもーどうすればいいん!!!
これはUnityというかFusion360の問題だぁ。バージョン管理するのはいいけど、それって出力したFBXファイルにも必要な情報科かい??
もうちょっと何とかならんもんかねぇ。
だれかいい方法おしえてくだせぇ