便利なAddressableAssetだけど、fbxのAnimationタブでエラーが出る

便利なAddressableAssetだけど、fbxのAnimationタブでエラーが出る

超ピンポイントなエラー話です。

Google先生に聞いてみても、まだ誰も踏んでないエラーっぽいのであまり情報がない感じでした。

エラーの内容はタイトル通りなんだけど、Addressable Assetを使っている時、fbxをインポートした際のImport settings画面でAnimationタブを選択すると、以下のエラーメッセージが出力され続け、個々のアニメーション設定ができません。

InvalidOperationException: Operation is not valid due to the current state of the object
System.Collections.Generic.Stack`1[System.Boolean].Pop ()

UnityEditor.EditorGUI.EndChangeCheck () (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorGUI.cs:315)

OnGUI()で呼ばれているのか、マウスを動かすたびにエラーメッセージが出るので割と心臓に悪いです。

メッセージ自体は別によかばい! とスルーしてもいいのですが、肝心のアニメーション設定をするパーツが描画されないのが大ピンチ。

Humanoid型(人型)のアニメーションはUnityのエディタで作ることができず、

Keyframing translation on humanoid rig is not supported!

なんて怒られてしまいます。なのでBlenderなどを使って外部からアニメーションをインポートしたいのにこれはあんまりだ!

 

環境

macOS 10.13 High Sierra

Unity2018.2.2f1

com.unity.addressables”: “0.0.22-preview

背景

Unity2018.2から、preview版ではありますがAddressable Assetの機能を使うことができるようになりました。

Addressable Assetについては上記の神ブログで分かりやすく紹介されているのですが、今作っているゲームのプロジェクトでも導入してみようと考えました。

3Dのゲームを考えていたので、3Dオブジェクトを作り、Blenderでアニメーションを付けたモデルをUnityにインポートしました。

通常、Unityのエディタ上でHumanoid型のアニメーションを作ることができないので、外部のツールを使ってアニメーションクリップを作成しています。

fbxファイルをUnityにインポートして、いざアニメーションの設定だ! となった時に、冒頭のエラーメッセージが大量に出力されました。Inspectorウィンドウではアニメーション設定に必要なパーツがエラーのために描画されないので、ループの設定などができない状態となりました。

画面はこうなる

通常のImport SettingsのAnimationタブだと、以下のように個々のアニメーション設定が可能です。例えば以下の画像だと、LoopTimeやオフセット、その他カーブなどの設定が可能です。

通常のAnimationタブ
通常のAnimationタブ

 

外部からインポートしたアニメーション設定はここでしかいじれず、ループを設定したいならこの画面を使わないといけません。そのはず。

しかし、Addressable Assetのパッケージを導入している場合、なんらかの設定がバッティングしているのか、以下のように設定を行うエリアが描画されません。メッセージから想像すると、レイアウトグループの閉じ忘れっぽい?

下がすっからかん
下がすっからかん

 

原因と対策について

上でもちょっと触れましたが、アニメーションクリップの細かい設定ができないので、ループさせたい時に困ります。

原因はAddressable Assetを使っているから。多分これはみんな気付くと思う。まぁ私は気付かなくて1時間くらい右往左往してましたが。

対策としては、Addressable Assetのパッケージインポートを外せばOK。

パッケージインポートは<Project Root>/Packages/manifest.jsonに”com.unity.addressables”: “0.0.22-preview”を記載することで行なっているはずなので、この行を消します。jsonなのでコメントアウトはできないのよね。

アニメーション設定を行うときだけAddressable Assetのパッケージインポートを外し、設定後に戻せばアニメーション設定を維持したままAddressable Assetを使うことができます。ちゃんとアニメーションもループしてくれました。

ただし、プロジェクト内のスクリプトでUnityEngine.AddressableAssetの名前空間を使っている場合はエラーが出るので注意。スクリプト側を修正しないとゲームの実行はできないため、ゲーム内でアニメーションを確認するためには再度パッケージインポートを記載する必要があります。

行ったり来たりするのは結構めんどくさいので、ウォーターフォール式に進めた方が安全かも。開発プロセスで対処するのが良さそうです。

ただまぁまだpreviewの機能を使っているため、エラーが出るのも致し方なしですし、Addressable Assetを使うメリットの方が大きそうなので、プロセスで対処できるのであればまぁいいか、という感じ。

次の2018.3あたりでは直ってると信じて、Addressable Assetを使ってみよう。

まとめ

今回のエラーの対応は以下の通り。

Addressable Assetを使うと、3DモデルのインポートでAnimationの設定ができません。

Animationの設定を行う場合は、<Project Root>/Packages/manifest.jsonでAddressable Assetのインポートをする記述を削除します。

ただし、スクリプトでAddressableAssetの名前空間を使っている場合はコンパイルエラーが出るので注意が必要です。

……いやぁニッチなエラーでしたね。

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!