Blenderで作ったアニメがUnityでうまく再生できない問題
Blenderで作ったアニメーションが、Unityでうまく再生できずにクッソハマったのでメモ。
何が起こった?
上の画像のような、Unityちゃんが転がるアニメーションをBlenderで作って、FBXエクスポートを行い、Unityに持ち込んだところ、以下の状態になった。
謎のImportFBXエラーと、再生されるアニメーションのおかしさ。
エラーの内容がよくわからないが、フレームレートがゼロになっている?Unity側の設定は、ひとまずGenericに設定している。
原因がわからず、Blenderのデータがおかしくなっている?と仮定して、Blenderのバージョンを最新(3.3)から2.9に落としてみたり、人型以外のアニメーションを作って試したりしたが、それでも分からず。
結論
Unityのエラー文「Import FBX Errors: Framerate was set to 0.00, it's been reset to 1.0.」でググってみたところ、英文だが有力っぽい情報があった。
要約すると、「Unity側とBlender側のフレームレート(=FPS)が違うよ」ということらしい。
Blender側のプロパティで、フレームレートは30FPSとなっている。一方、Unityは60FPSで動作しているため、不一致となっておかしくなるっぽい。
Unity側のインポート設定から、Animation→「Resample Curves」のチェックを外したところ、正常に動作した。
たったこれだけの事の解決に、一か月近く掛かってしまった。もう許せるぞオイ!
ただし、これはインポート設定を「Generic」アニメーションに設定した場合のみ。「Humanoid」に設定すると、何故かうまく動かない。
解決策が分かったら、追記予定。
追記:
結局、元のFBXファイルを60fpsで作成しないとダメっぽい。ということで、元のアニメーションが30fpsで作成しているので、キーフレームを倍に伸ばして60fpsに対応する。
①現在のキーを先頭(0フレーム)に設定(スケールの基準位置となる)
②Aキーで全キーフレームを選択
③メニューから「キー」→「トランスフォーム」→「スケール」を選択
④2倍にするので、キーボードの「2」キーを押す
これで、キーフレームが2倍に伸びる。あとは全てのアクションを手直ししていき、60fpsでFBXエクスポートする。
わかりづらいが、想定した動作になっている。成功。ぐるんぐるん。
動いた記念に作った、ホラホラ先輩ユニティちゃん