ツクロウヤ

Unityによるゲーム開発記やUnity,3dsMaxのTipsなどを記載していきます。

【Unity+3dsmax】Genericのリグでアニメの移動を反映する方法

アクションゲームを作っている際に、攻撃で踏み込んだり、ジャンプしたりしますが、アニメで設定した移動をオブジェクトに反映する方法がイマイチうまくいかず、ココ最近詰まっていたところが一旦のやり方が分かりましたので記載。
「AnimationType」が「Humanoid」では方向などがおかしくなっていませんでしたが、敵キャラなどHumanoidで設定できないキャラを「Generic」にした場合に方向や移動量などがおかしくなっていたので、その解決策です。

やりたいこと

四足や鳥など「AnimationType」が「Generic」のもので、

・アニメで設定した移動をオブジェクトに反映したい
・CharacterControllerごと移動して壁などに貫通させない

やり方

今回のテストでは一旦3dsmaxユーザーお馴染みのティーポットを使用しました。

f:id:ArtAwA:20170531021735j:plain

・3dsmaxの準備

リグの構成としては基本的に以前に紹介したリグの構成と変更ありません。
細かい構成の説明は以下のリンクを参照ください。

【Unity+3dsmax】UnityのHumanoid用リグ - ツクロウヤ

今回の構成では簡単にこんな感じになっています。

f:id:ArtAwA:20170531023904j:plain

以前と違う点としては、「SKL_Root」に対してUnityに反映させたいアニメを焼き込むようにしています。直接このオブジェクトを動かすのはよろしくないので、CTR_MoveAllに対して位置コンストレイント、方向コンストレイントを掛けて、CTR_MoveAllにアニメのキーを打ち、出力時の設定でアニメを焼き込んでいます。
出力方法に関しても以前の記事を参照お願いします。

【Unity+3dsmax】Unityへのモデル+アニメの出力方法 - ツクロウヤ

・Unityの準備

【Root node の設定】
出力したFBXをUnity側で設定が必要です。
ImportSettingで「Root node」で反映させたいアニメを付けたオブジェクトを設定します。今回の場合では「SKL_Root」が該当します。

f:id:ArtAwA:20170531025040j:plain

※3dsmaxで書き出したものはUnityと軸が違いますのでプレビューでおかしな方向を向いているかと思いますが問題ありません。
(この辺をそもそも3dsmaxの出力時に解決できればごちゃごちゃやらなくてもいいかも...?)
方向を合わせるには以前のリグ説明と同じく、「ALL_Root」のオブジェクトを回転させてます。

【アニメーションクリップの設定】
この状態でアニメを確認すると以下の画像のようになります。

f:id:ArtAwA:20170531030320j:plain

ここで問題があり、「Animator.RootT」と「SKL_Root」の両方があるため、倍動く状態になっています。また親のPosition,Rotation,Scaleのキーは不要ですし、ALL_Rootも方向制御用のものですので、キーは不要です。
モデルの中にあるアニメのキーは直接編集することが出来ませんので、アニメを「Ctrl+D」で複製することで編集可能にします。そして、不要なキーを削除してあげましょう。
削除した後は以下のような感じになります。

f:id:ArtAwA:20170531030757j:plain

【Animatorの設定】
これまでの設定でRootに対してアニメが付いている状態となりますので、AnimatorのComponentの設定で「Apply Root Motion」にチェックを付けてあげます。
この項目にチェックが付いているとRootのアニメがオブジェクトのTransformに反映されます。

f:id:ArtAwA:20170531031640j:plain

他アニメなどの制御でチェックが付いているとおかしくなる場合もあるため、アニメ時にRootの移動がある場合のみスクリプトでチェックをOnにしてあげます。

まとめ

【やり方まとめ】
1. 3dsmaxのリグでアニメを反映させたいオブジェクトを作成
2. [1.]のオブジェクトにアニメを焼き込み
3. 「Root node」に[1.]のオブジェクトを設定
4. アニメを編集可能なように複製(Ctrl+D)
5. 不要なキーを削除(重複、親、方向制御用オブジェクト)
6. 移動を反映させたいアニメでスクリプトからAnimatorの「Apply Root Motion」をOnに

ちゃんと動いているところをGIFとかにしたいですが今日はめんど(ry
近いうちに結果をGIFとかで貼っつけて更新します。

それでは今回はこの辺で
(´・ω・`*)ノシ

参考サイト

Unity - マニュアル: ルートモーションの仕組み

Unityちゃんとおぼえたい!: 【Unity】アニメーションのルートモーションについて検証

Unity : アニメーションとGameObjectの位置を同期させたい時に気をつけること - いんでぃーづ

 

【Unity+3dsmax】Unityへのモデル+アニメの出力方法

今回は3dsmax→Unityへの出力方法についてです。
3dsmax2017から新しくゲームエクスポータという機能が追加されましたので、そちらを使用した出力に関してまとめたいと思います。

ゲームエクスポータ

ゲームエクスポータは書き出しの箇所にあります。

f:id:ArtAwA:20170430214745j:plain

ゲームエクスポータでは各種設定を行い、FBX形式で出力することが可能です。
細かい項目の説明などは公式におまかせして、Unityでの設定や自分のやり方などを紹介していきたいと思います。

・公式ヘルプ
[ゲーム エクスポータ](Game Exporter)ダイアログ ボックス | 3ds Max | Autodesk Knowledge Network

モデルの出力

ゲームエクスポータを開くと以下のようなものが開きます。
モデルの出力設定はモデルタブで行います。

f:id:ArtAwA:20170430231508j:plain

【①について】
上部タブの「モデル」「アニメーションクリップ」を選択することによってモデル、アニメの設定タブが切り替わります。

【②について】
書き出し項目を設定することが出来ます。
「すべてを書き出し」「選択を書き出し」「オブジェクトセットを書き出し」の項目があり、「オブジェクトセットを書き出し」の利用頻度が高いです。

f:id:ArtAwA:20170430230708j:plain

オブジェクトセットはメインツールバーの「選択セット作成」から設定が可能です。
(なぜ名称を合わせないんでしょうね... 3dsmaxはこういうの多い...)
オブジェクトセットに設定して何を書き出すかはリグの記事を参照ください。

【Unity+3dsmax】UnityのHumanoid用リグ - ツクロウヤ

【③について】
ジオメトリの設定やカメラなどの設定が出来ます。
アニメを行うモデルを出力する場合は、スキニングの項目にチェック(デフォルトはOFF)を入れておきます。スキニングの項目にチェックを入れておかないとUnityでSkinedMeshRendererにならないので、アニメにメッシュが追従しません。
アニメーションの項目がありますが、こちらはチェック不要です。

【④について】
座標軸とメディアの埋め込みを設定出来ます。
座標軸はアップ軸を「Y軸」「Z軸」設定できるはずですが、Unity上に取り込んでも特にデータ的な変化がありません... (バグ?)
3dsmaxの座標系はZ-UpでUnityはY-UpなのでY-Upに変換したいところですが...
メディアの埋め込みでは設定しているテクスチャなどをFBX内に含むことが可能ですが、Unityに取り込む際は基本的にはバラして入れるので、OFFにしています。

【⑤について】
出力パスなどを設定出来る箇所です。
フォルダアイコンの箇所でパスを設定出来ますが、何故かファイル名のところは手打ちじゃないと設定出来ないようになっています...
ファイルを上書きしたい場合などは同じファイル名をわざわざ入力してやる必要があります。

【⑥について】
設定の保存、読み込みが出来る箇所です。
「モデル」「アニメーションクリップ」でそれぞれ保存ファイルが独立しています。
なので、「モデル」タブで保存をした場合、「アニメーションクリップ」のタブで設定している項目は保存されません。

アニメの出力

アニメの出力はアニメタブで設定を行います。

f:id:ArtAwA:20170501001541j:plain

【①について】
Unityに出力するアニメはここでクリップ名とフレームを設定してあげます。
ココがUnityに出力した際に色々と問題があります...
・注意1:クリップ名が小文字になる
クリップ名は大文字で記載していてもUnityに取り込んだ際に、何故か小文字になる場合があります。Attack01など数字を含む場合などは大文字で取り込まれます。
・注意2:フレームが200を超える場合にUnityで読み込まれない
クリップの開始、終了フレームに200フレームを超える設定をしているとUnityに取り込んだ際にアニメが読み込まれません。FBXのファイル自体にはテキストで展開してみましたがデータが入っているようなので、もしかしたらUnity+このFBXの問題かもしれません...

【②について】

ここではアニメファイルの持たせ方を設定出来ます。
「クリップを1つのファイルに保存」「複数のクリップファイルに保存」があります。管理的には「クリップを1つのファイルに保存」でまとめて出力したいですが、200フレーム超えると読み込まれない問題のために今は「複数のクリップファイルに保存」で書き出しています。
複数保存の場合、クリップ名がファイル名の末尾に追加された形で出力されます。

それでは今回はこの辺で
(´・ω・`*)ノシ

【Unity+3dsmax】UnityのHumanoid用リグ

今回も前回に引き続き、Unity+3dsmaxでリグを組む際のまとめです。
今回は3dsmaxでのリグの構成についてまとめていきたいと思います。
ちなみにUnityのHumanoid用でスマホなどで使用する指などを無くした最小構成のものです。

続きを読む

【3dsMax】Unityで使うときのリグについて

個人開発で現在Unity+3dsMaxの組み合わせでリグやアニメーションの制御、どういったデータを作るとよいかを改めてやっていますが、自分の脳内を整理するためにも何回かに分けて、まとめてみようかと思います。
(現在検証中の箇所なので、内容を修正する可能性があります)

今回はいったん3dsMaxのリグについて。

続きを読む

【Photoshop】テキストの分割ツール

ゲームのUI演出などで、VICTORYなどのテキストが波打つようにアニメーションするものがありますが、そういったものを作る際に、テキストをバラシて、それぞれの文字ごとに書き出すのが面倒くさい...

ということで、Photoshopでテキストを一文字づつや行ごとにレイヤーを分割するツールを作ってみました。

f:id:ArtAwA:20170324013245j:plain

続きを読む

【Unity】マップなどの配置ツール

最近、仕事や個人開発で背景を作る機会が増えてきましたので、その辺で作ったツールのご紹介。

背景を作成する際は柱や地面のタイルなどパーツ毎にアセットを作成し、Unity上もしくは3Dツール上でそのアセットを配置して背景を作成しています。

スナップ機能などがあるとはいえ、Unity上でちまちま並べるのは結構面倒だなということで、配置を補助するツールを作ってみました。

f:id:ArtAwA:20170228224546j:plain

続きを読む

【開発記】ステージ選択とか

またもや久しぶりの更新...
正直あまり芳しくない進捗ですが、中断しないために進捗記載。

今回やったことは、
・ホーム→ステージ選択の実装
・各データをScriptableObject化
 └敵情報、ステージ情報、エフェクト、ショット... etc
・アニメ時の移動処理を修正(検証中)

■各データをScriptableObject化

今までデータ類などはCSVから取得していましたが、ステージ選択を実装する際に、各データなどをScriptableObjectにしてみました。

「例:ショットのパラメータ設定」

f:id:ArtAwA:20170226120617j:plain

拡張しやすかったり、インスタンスしてそのまま使えるので、結構便利だなと思い、他のデータも対応しました。
早めにやっておいた方が良い部分ではありましたが、ただ、今までやっていたことを他の方法でやるようにしただけなので、進行しているわけではなく...
無駄にデータ定義の表示を整えようとすることに時間をかけたり... 反省...

■アニメ時の移動処理を修正

ここが今現在、一番詰まっている箇所...
攻撃をする際に、踏み込んだり、ジャンプしたりしますが、アニメをそのまま再生すると移動時にコライダーがついてこないので、貫通したりしました。

なので、アニメの特定のタイミングでイベントを定義して、指定の移動をTweenで行うといったことをやっていました。

ただ、このやり方は非常に設定が面倒な上にアニメのような調整ができないので、もっさりした動きになっています...

というわけで今現在はこの辺りを検証中。
やりたいこととしては、
・アニメで設定した移動を行う(向いている方向を考慮して)
・CharacterControllerごと移動して、壁などに貫通しない
です。

色々と調べていて、MecanimとApplayRootMotionの設定関連でイケそうな感じだったので検証中ですが、設定の仕方が悪いのか、元のアニメが悪いのか、移動方向とは別方向に移動したり、アニメの一部が壊れたり...
原因を分割するために一旦公式で出ているアニメを使うかと思いましたが、「ユニティちゃん」はRootが動いておらず、「Mecanim Locomotion Starter Kit」は動いていたり...
どういったデータを作ればいいのだろう...
引き続き、検証。

それでは今回はこの辺で
(´・ω・`*)ノシ