この記事では、UnityとMayaの両アプリケーション間で、モデルの編集、インポート、エクスポートを簡単、効率的に行えるFBXラウンドトリップの使い方を解説します。
◆動作検証環境
・Maya Maya LT 2019
・FBX Exporter 4.1.0参考)https://docs.unity.cn/Packages/com.unity.formats.fbx@4.0/manual/integration.html
- 1 【Unity】 FBX Exporterのインストールと準備
- 2 【Maya】 FBX Exporter利用に向けての初期設定
- 3 【Unity】 編集対象のオブジェクトをMayaFBX ExporterFBX Exporterする初期設定
- 4 【Unity】 ラウンドトリップ機能を使用しMayaと連携する(Unity→Maya)
- 5 【Maya】 ラウンドトリップ機能を使用しMayaと連携する(Maya→Unity)
- 6 【Maya】 Maya側で作成したアニメーションをUnityに送る(Maya→Unity)
- 7 【Maya】アトリビューション関係のアニメーションをUnityに送る(Maya→Unity)
- 8 【Maya】 Maya側で作成したカスタムアトリビュートを利用したアニメーションをUnityに送る(Maya→Unity)
【Unity】 FBX Exporterのインストールと準備
FBX Exporterのインストール
以前は、Asset Storeからインストールしていましたが、現在はunityのプロジェクト内から設定を行います。
[Window]メニューの[Package Manager] を選択します。
上部のタブを[Unity Registry]と選択します。
下へスクロールすると、FBX Exproterの項目があるので選択します。
右下の[Install] を選択します。
バージョン番号の横に以下のようにチェックマークがつけばインストール完了です。
プロジェクトフォルダ内に、新たにPackagesディレクトリが追加され、その中にFBX Exporterフォルダがあります。
FBX Exporterの使用準備
Fbxデータ用のディレクトリの作成
UnityとMaya間でラウンドトリップして利用するデータを扱いやすくするために、Assetsディレクトリ内に新規にディレクトリを作成します。
今回は、Fbxという名前で作成しました。
対象データを扱うディレクトリ指定と、UnityとMayaを関係づける設定
[Edit]→[Project Settings]を選択します。
- Export Pathにさきほど作成したディレクトリを指定します。
- 3D Applicationに、連携させるアプリケーションを指定します(インストールされている対象のアプリケーションが表示されます)
- Install Unity Integratioを選択します。
Install Unity Integratioを選択し、指定されているディレクトリを選択すると、一瞬Mayaが立ち上がり、以下のメッセージが表示され初期設定が完了します。
【Maya】 FBX Exporter利用に向けての初期設定
次にMayaを立ち上げ、Maya側の初期設定を行います。
MayaにFBX Exporterがインストールされているか確認する
さきほどまでの作業でMayaにFBXExpoterが正常にインストールされていれば、[File]メニューの中に[Unity]の項目が追加されています。
Maya側のスケール、fpsの設定
[Windows]-> [Settings/Preferences] -> [Preferences]を選択します。
[Settings]を選択し、Unityで使用されるスケールの単位(1マス=1m)に合わせるために、Liner設定を[meter]にします。
また、ゲーム開発ではほとんどのケースで30fpsが利用されるので、それに合わせ設定します。
【Unity】 編集対象のオブジェクトをMayaFBX ExporterFBX Exporterする初期設定
サンプルオブジェクトの作成
今回は、動作確認のため①planeのステージと、②3つのCylinderのオブジェクトを作成します。
②のオブジェクトには親要素になるようにEnptyObjectを作成します。
対象オブジェクトの位置をMayaの原点に合わせる
今回はCylindersを基準に作業をするよう設定します。
場所の基準用のEmptyオブジェクトを作成します。
今回はCylinders_pivotとし、3つのCylinderを含むCylindersを子要素とします。
そうすると、Cylindersのポジションは、Cylinders_pivotの相対の値となるため、全て0となります。
ステージもCylindersの場所に合わせるため、Cylinders_pivotを複製し、同じポジション情報を持つEmpオブジェクトを作成し、Plane_pivotと名前を変更します。
次にTerrainを子要素として含めます。こちらもPlane_pivot(Cylinders_pivoの場所と同じ)に対しての相対のポジション数値となります。
【Unity】 ラウンドトリップ機能を使用しMayaと連携する(Unity→Maya)
FBX Exporterをインストールし、オブジェクトを右クリックすると2つの機能が追加されています。
- Convert To FBX Prefab Variant
- Export To FBX
です。
Unityからオブジェクトをエクスポートする
まずはステージとして作成したplaneモデルをエクスポートします。
背景等のようにMayaの方でモデル編集の必要がなくても、対象のモデル編集の際に、サイズや背景との組み合わせ等でMaya側で利用したい場合があると思います。
そのような際に利用する機能です。
Plane_pivotを右クリックしてExport To FBXを選択します。
さきほど作成した、Assets/Fbxディレクトリを指定してエクスポートします。
FbxディレクトリにエクスポートしたFbxデータが作成されます。
Mayaからオブジェクトをインポートする
[File]->[import]から、さきほどエクスポートしたFBXデータ(unity_project/Assets/Fbx)をMayaでインポートします。
これでUnityで作成したステージオブジェクトがMayaにインポートされました。
Unityからオブジェクトをプレハブ状態でコンバートする
次にUnityとMaya間で連携して編集できるようにプレハブ状態で、Cylinderのオブジェクトをコンバートします。
Cylinders_pivotを右クリックし、Convert To FBX Prefab Variantを選択します。
Convertを選択します。
projectディレクトリに、モデルとプレハブが作成されました。
Mayaで、Unityでコンバートしたオブジェクトをインポートする
[File] -> [Unity] -> [Import]を選択します。
さきほどコンバートしたfbxデータを選択します。
これで、コンバートしたデータをMayaに取り込む事ができました。
この時に、Cylinder_pivot_UnityExportSetなど_UnityExportSetの名前となっているセットがあるか確認します。
もし、見当たらない場合は、一度保存、もう一度プロジェクトを開き直します。
【Maya】 ラウンドトリップ機能を使用しMayaと連携する(Maya→Unity)
コンバートしたデータを編集し、Unityへエクスポートする
では、さきほどコンバートしてMayaへ取り込んだデータを編集します。
以下のようにcylinder_1の子要素として、円錐上のオブジェクトを追加しました。
Unityのプロジェクトにはなく、Mayaの編集時に追加したオブジェクトがある場合は、追加したものをUnityExportSetに追加する必要があります。
ここのセットに含まれていない情報は、エクスポートしてもUnity側で反映されません
編集が終わりましたら、Cylinder_pivot_UnityExportSetを選択し、[File]->[unity]->[Export]を選択します。
Unityでシーンを確認すると、編集が反映されている事を確認できます。
【Maya】 Maya側で作成したアニメーションをUnityに送る(Maya→Unity)
Maya側で編集したモデル同様、アニメーションもUnityと連携する事ができます。
アニメーションはMayaで作成、フィジックスの動きはUnityで設定するなどで開発したい時に便利となります。
Mayaでアニメーションを作成する
今回はオブジェクトを上下させるアニメーションを、キーフレームを利用して作成します。
フレーム0 : TranslateY 0
フレーム60 : TranslateY 0.5
フレーム0 : TranslateY 0
と設定して、Exportします。
Unityでアニメーションを確認する
アニメーションがimportされるとTake001といる名前のアニメーションデータが確認できます。
importしたモデルのInspector内の[RIg]を選択し、[Generic]をなっている事を確認します。
次にInspector内の[Animation]を選択し、Take001の内容が反映されている事を確認します。
アニメーションのRigがGenericとなっているので、Hierarchyのモデルにもアニメーション設定が必要となります。
モデルを選択し、Add ComponentからAnimatorを追加します。
次に、今作成したアニメーターを動かすコントローラーを作成します。
projectより追加します。
作成したコントローラーを開きます。
この中に、インポートしたアニメーション(take001)をドラッグ・アンド・ドロップで追加します。
設定したコントローラーをアニメーターへ追加します。
これでプレイすると先程のアニメーションがUnity側の動作で確認できます。
現在はアニメーションがループされないので、対応させます。
【Maya】アトリビューション関係のアニメーションをUnityに送る(Maya→Unity)
今回はモデルに可視化のオプションを設定したアニメーションを作成し、Unityと連携する方法を紹介します。
例として、60〜120フレームの間のみ、visibilityを利用し円錐状のオブジェクトが消えるアニメーションを作成しました。
これでExportすればUnity側でもアニメーションが反映されます。
【Maya】 Maya側で作成したカスタムアトリビュートを利用したアニメーションをUnityに送る(Maya→Unity)
Mayaで独自に追加したアトリビュートを利用したアニメーションをUnityと連携する方法を紹介します。
例えば、これまででモデルの上下の動きのアニメーションを作成しました。
これを発展させ、モデルが上がっている時には、さらにこのアニメーション、下がっている時にはさらにこのアニメーションというように、場所情報を取得して他の動きに連動方法となります。
カスタムアトリビュートの追加
[Attribute Editor] -> [Attributes] -> [Add Attributes]を選択します。
Heightという名前、で作成しました。
追加後にchannel boxを確認すると、先程作成したHeightという項目が追加されています。
試しに、TranslateYを同じ値を、同じキーフレームで設定しました。
一度Unityへエクスポートします。
次にUnity側の設定を行います。
[Animator]->[Parameters] から追加ボタンを押し、カスタムアトリビューションで指定した[Float]を指定します。
先程指定した名前で作成します。
アニメーション元のデータを確認すると[Animated Custom Prop]の項目が追加されていますので、チェックします。
これでプレイすると、先程追加したパラメーターがMayaで指定してフレームのアニメーション数値を表示している事を確認できます。
以上、UnityとMayaの両アプリケーション間で、モデルの編集、インポート、エクスポートを簡単、効率的に行えるFBXラウンドトリップの使い方を解説しました。