0 支持
357 閲覧
(280 ポイント) Q&A

Mac Mojave
Spritestudio 6.3.1
SpriteStudio 6 Player for Unity  1.1.19

Awake()のなかでTrackRebootするとうまくトランジションが機能せず、アニメが停止することが起こったので、TrackRebootのタイミングが悪いかもとStart()の中でTrackRebootするようにするとうまくトランジションが機能するようになりました。

その後キャラを増やしてしばらくするとまたうまくトランジションしない事象が起こり、またTrackRebootのタイミングが原因かもと、Start()よりもっと後のメソッド内でTrackRebootするとうまくトランジションが機能するようになりました。

このエラーではUnityのコンソールでもエラーが怒らずにアニメが停止するのでとても特定が難しいです。TrackRebootの位置を変えるだけで正常にアニメするようになるのでTrackRebootがなんらかの原因でしょう。同じエラーに遭遇する人もでると思うので書いておきます。

このページをシェアする

回答 1

0 支持
(5.0k ポイント)
編集

お世話になっております。SS6PU担当です。

初見の障害なので、こちらでも調査したいと思いますが、一点確認させてください。

その後キャラを増やしてしばらくするとまたうまくトランジションしない事象が起こり、またTrackRebootのタイミングが原因かもと、Start()よりもっと後のメソッド内でTrackRebootするとうまくトランジションが機能するようになりました。

とあるのですが、SS6Player for Unityは処理構造上、「同時に動作している他のアニメーションオブジェクトの影響を受けない」形になっているので(全体処理量でのフレームスキップ以外だと、せいぜいUnityの動的バッチングでのマテリアル毎の描画順序……くらいではないでしょうか?)、「表示数が増えると」という点が微妙に腑に落ちておりません(障害があるとしたら他の状況の可能性が高いかもしれません)。

その上で、お手元のプログラムでSS6のアニメーションオブジェクトの再生状態と関係のあるGameObjectのStartがCoroutine(コルーチン)になっていたりして、実際の初期化の並列処理化などされておりませんでしょうか?

※もしStartでコルーチンを使用している場合、(コルーチンは並列処理ですので)コルーチンでの初期化が終了したかどうかをUpdate/LateUpdateなどで判定して(初期化が終わっている必要がある場合)何も処理しないで帰るような処置をしないと、コルーチンで初期化中にUpdate/LateUpdateの方が(実質的な)Start(のコルーチン)での初期化処理よりも先に走ってしまう場合がありますので、確かにその場合には初期化でかかる時間によって正常動作に影響があるかもしれません。

そのようなお手元の実装がございますかどうか、情報頂けますと(不具合の修正などに)非常に助かります。

お手数とは存じますが、何卒ご検討のほどお願い申し上げます。


追伸:

Awake()のなかでTrackRebootするとうまくトランジションが機能せず

と頂いておりますが、Awakeでは、Awakeを実行しているコンポーネント以外の(同じGameObjectについている)他のコンポーネントなどが初期化されている保証がないので、アニメーションの再生や設定変更などの処理を行うことは推奨いたしかねます。

※SS6PUでのアニメーションオブジェクトの主要な初期化も大半をStartで行っています。

できるだけStart以降で行うようにしてください。

...