【Unity4】リリース前調整、エラー「The animation state could not be played because it couldn’t be found!」の対応

fbxでインポートした3DCGデータがanimation.Play(”hoge”)でちゃんとアニメーションしてくれなかった。

調べたところ、オブジェクトのモーションデータに、Animation Typeという属性があって、それが原因だった。

これが、また隠し属性みたいになっていて、アニメーションアセットのインスペクターでDebug項目を表示しないと見えない。

GameObject.animation.Play()によるアクセスは旧来のやり方らしい。

なので、Animation Typeも旧式「1」である必要がある。

インポートしたデータでは「2」となっていた。

Unity上で作成したアニメーションアセットなら、インスペクター上で直接値を変更できるみたいだけど、fbxファイルの場合、インスペクターが非活性になっている。

じゃあ、これをどうやれば変更できるかというと、fbxのオブジェクトのリグ設定で、「Legacy」を選択してやると変更できた。

これで、アセットストアから落としてきたオブジェクトをダンジョンに配置して、シナリオ用のスクリプトからアニメーションさせる、ということが可能になったわけだ。

さて、いよいよリリースかと思いきや、また新しい問題が発生した。

リリース用にビルド設定にて、Development Buildのチェックをはずして、スマホにインストールしたところ、フリーズ!

しかも、2機種あるうちの1機種(ハーウェイのGL07S)だけ発生する。

それも、Development Buildのチェックをはずした時だけ。

これは迷宮入りか、と半ば絶望しかけたが、いろいろ設定変えてビルド&デプロイを繰り返すうちに、なんとかフリーズが発生している箇所が特定できた。

ダイアログなど、TextMeshを使って文字情報を表示しているコンポーネントがあるんだが、このTextMeshに TextMesh.text = “hoge” のように直接文字列を代入しているところで、落ちているみたい。

ここからは推測だが、機種によってGPUの挙動が若干異なっていて、TextMesh.textを頻繁に書き換えたりすると、深刻なエラーが発生する機種があるようだ。

少なくともハーウェイGL07Sでは発生した。おそらく機種によってスレッドセーフに実装されてないのかもしれない。

発生箇所はわかったものの、修正はけっこう大変そうだなあ。

リリース間近だというのに。

5年前

コメントを残す

メールアドレスが公開されることはありません。