一度メールでSpineのサポートへ送った質問なのですが、次からフォーラムへ投稿するように勧められました。
Spineの再生部分でビルドしたアプリが落ちる問題が発生しています。
- Spineアニメーションが複数再生・削除されるゲーム部分を2分ほど再生すると落ちます。
- Unity Cloud Buildしたアプリのみ、iOS・Android両方落ちます。複数端末・OSバージョンで確認しています。
- UnityからXCodeやAndroidプロジェクトを生成して、直接ビルドすると落ちません。
- SkeletonGraphic.cs の ApplyAnimation () 内、state.Apply(skeleton); 周辺(L282-285)をコメントアウトすると、落ちません。
- Exception Type は EXC_BAD_ACCESS(SIGSEGV) です。
- 使っているSpineのバージョンは 3.8.xx (2019.4) でしたが、最新パッケージ(spine-unity-3.8-2021-02-11)にしても落ちました。
- Unityバージョンは2019.4.6f1です。
- Unityにてプロファイラーを確認しましたが、特に気になる動きを見つけられていません。[/list]
何が悪いのか、どう修正すればいいのかよくわからず、困っています。
できれば Unity Cloud Build を使いたいのですが、どうすればいいでしょうか?
Spineから頂いた返信は以下です。
こんにちは、
お問い合わせいただきありがとうございます。今後の質問をSpineフォーラムに投稿していただけませんか。
http://www.esotericsoftware.com/forum/
このようにして、他の人がディスカッションに参加し、回答から利益を得ることができます。心配しないでください、私たちはフォーラムの投稿に非常に迅速に答える傾向があります!ありがとうございました!
あなたの質問について:
「Spineバージョン2020.2」の使用についておっしゃいました。 Spineバージョン2020.2はなく、最新のSpine非ベータバージョンは3.8.99、最新のベータバージョンは4.0.54-betaです。
それとも、2020年2月からスパインユニティパッケージを使用しているということですか?ここで、バージョン番号には完全な日付が含まれています。 spine-unity-3.8-2021-02-17.unitypackage
。
例外タイプはEXC_BAD_ACCESS(SIGSEGV)です。
ビルドされた実行可能ファイルがSIGSEGVを生成できる場合、Unityのビルドパイプラインまたはクラウドビルドインフラストラクチャのいずれかが壊れているように見えます。 spine-unityおよびspine-cppランタイムのコードは、「安全でない」拡張子のないcsharpを使用するため、それ自体でSIGSEGVを生成することはできません。
あなたが言及したコード行から、イベントコールバックが発生します。おそらく、イベントコールバックデリゲートの一部に登録していますか?どのデリゲートにも登録しないようにして、それでもクラッシュするかどうかを確認することができます。そうでない場合は、コールバックメソッドのコードがSIGSEGVを引き起こします。
SkeletonGraphic.cs:307の282〜285行目ではなく、 UpdateMesh();
をコメントアウトすることもできます。これもクラッシュする場合、問題はメッシュの更新に関連している可能性があり、三角形が前のフレームと同じである場合は何もしません。したがって、上記の行282-285を無効にすると、行578を呼び出さないという効果があります。
if(updateTriangles)meshGenerator.FillTriangles(mesh);
コードに何も見つからない場合は、Unityのサポートチームに連絡して、ビルドパイプラインがクラウドビルドでSIGSEGVを引き起こしていることを報告する必要があります。
乾杯、
ハラルド
Hello,
Thanks for contacting us. Would you mind posting future question on the Spine forum, please?
http://www.esotericsoftware.com/forum/
This way others can join the discussion and benefit from the answers. Don't worry, we tend to answer forum posts quite quickly! Thank you!
Regarding your question:
You mentioned using "Spine version 2020.2". There is no Spine version 2020.2, the latest Spine non-beta version is 3.8.99, the latest beta version is 4.0.54-beta.
Or did you mean you are using a spine-unity package from February 2020? Here the version numbers include the full date, e.g. spine-unity-3.8-2021-02-17.unitypackage
.
Exception Type は EXC_BAD_ACCESS(SIGSEGV) です。
If the built executable is able to produce a SIGSEGV, it seems as if either Unity's build pipeline or their cloud build infrastructure is broken. The code in the spine-unity and spine-cpp runtimes uses csharp without any unsafe
extensions, so it cannot produce a SIGSEGV on its own.
From the lines of code that you mentioned, event callbacks will be raised. Are you perhaps registering to some of the event callback delegates? You could have a try not registering to any delegate, and see if it still crashes. If not, then it would be the code in your callback method that causes the SIGSEGV.
You could also try if commenting out UpdateMesh();
in SkeletonGraphic.cs:307 instead of lines 282-285. If this crashes as well, the problem would be related to updating the mesh, which does nothing if the triangles are the same as in the previous frame. So disabling lines 282-285 above would have the effect of not calling line 578:
if (updateTriangles) meshGenerator.FillTriangles(mesh);
If you don't find anything in your code, I'm afraid you will have to contact Unity's support team and report that their build pipeline causes a SIGSEGV on cloud build.
Cheers,
Harald
この返信を受け、現在のこちらの現状はこちらです。
- イベント登録しているところがあったので、コメントアウトしましたが、変わらずcrashしました。
- SkeletonGraphic.cs:307の
UpdateMesh();
を L282-285 の代わりにコメントアウトしたところ、crashしました。
- 念の為 L578 の
if (updateTriangles) meshGenerator.FillTriangles(mesh);
だけコメントアウトしてみましたが、crashしました。
現状 L282-285をコメントアウトしない限りcrashするようです。
自分のコード内に原因が無さそうなので、Unityにも相談をします。
なにか他にできることがあれば教えてもらいたいです。