SpineデータをUnityにインポートしたら私はたくさんのバグに襲われました。
問題の箇所を調べるために3.8と4.0の環境で検証を重ねましたが、解決できなかったのでアドバイスを下さい。
以下は時系列順に書きます
■環境
・Unity2019.1.14f1
・Spine4.0 & 3.8
■確認した現象(Spineエディタ)
・Spine3.8で制作していたSpineプロジェクトを4.0で開きました。すると下記の警告が表示されました。
・しかし、Slot is not in Skeletonなどのエラー箇所は全てスケルトンデータ内に存在し、削除されていませんでした。
・私にはスケルトンは全て問題なく見えたので、このまま4.0のエクスポートを行い、Unityへインポートしました。
■確認した現象 (Unityへインポート:ランタイム4.0)
・Atk3aというアニメをエクスポートしたSpineデータから生成されたSkeletonDataがエラーを表示します。
Error reading skeleton JSON file for SkeletonData asset: Esther_SkeletonData
Error reading animation: Atk3a
Index was outside the bounds of the array.
at Spine.SkeletonJson.ReadSkeletonData (System.IO.TextReader reader) [0x01390] in C:\Users\kou-mobilestudio\Desktop\Test 4.0 Spine_Unity\Test 4.0 Spine_Unity\Assets\Spine\Runtime\spine-csharp\SkeletonJson.cs:368
at Spine.Unity.SkeletonDataAsset.ReadSkeletonData (System.String text, Spine.AttachmentLoader attachmentLoader, System.Single scale) [0x00017] in C:\Users\kou-mobilestudio\Desktop\Test 4.0 Spine_Unity\Test 4.0 Spine_Unity\Assets\Spine\Runtime\spine-unity\Asset Types\SkeletonDataAsset.cs:258
at Spine.Unity.SkeletonDataAsset.GetSkeletonData (System.Boolean quiet) [0x000c4] in C:\Users\kou-mobilestudio\Desktop\Test 4.0 Spine_Unity\Test 4.0 Spine_Unity\Assets\Spine\Runtime\spine-unity\Asset Types\SkeletonDataAsset.cs:173
UnityEngine.Debug:LogError(Object, Object)
Spine.Unity.SkeletonDataAsset:GetSkeletonData(Boolean) (at Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs:176)
Spine.Unity.SkeletonRenderer:Initialize(Boolean, Boolean) (at Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs:377)
Spine.Unity.SkeletonAnimation:Initialize(Boolean, Boolean) (at Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs:169)
Spine.Unity.Editor.DataReloadHandler:ReloadAllActiveSkeletonsEditMode() (at Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs:103)
Spine.Unity.Editor.DataReloadHandler:OnPlaymodeStateChanged(PlayModeStateChange) (at Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs:59)
Spine.Unity.Editor.SpineEditorUtilities:Initialize() (at Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs:211)
UnityEditor.EditorApplication:Internal_CallDelayFunctions()
・SkeletonDataのインスペクターにAttempt Reinportと表示されました。また、必要なマテリアルが生成されていませんでしたError reading animation: Atk3a
Index was outside the bounds of the array.
at Spine.SkeletonJson.ReadSkeletonData (System.IO.TextReader reader) [0x01390] in C:\Users\kou-mobilestudio\Desktop\Test 4.0 Spine_Unity\Test 4.0 Spine_Unity\Assets\Spine\Runtime\spine-csharp\SkeletonJson.cs:368
at Spine.Unity.SkeletonDataAsset.ReadSkeletonData (System.String text, Spine.AttachmentLoader attachmentLoader, System.Single scale) [0x00017] in C:\Users\kou-mobilestudio\Desktop\Test 4.0 Spine_Unity\Test 4.0 Spine_Unity\Assets\Spine\Runtime\spine-unity\Asset Types\SkeletonDataAsset.cs:258
at Spine.Unity.SkeletonDataAsset.GetSkeletonData (System.Boolean quiet) [0x000c4] in C:\Users\kou-mobilestudio\Desktop\Test 4.0 Spine_Unity\Test 4.0 Spine_Unity\Assets\Spine\Runtime\spine-unity\Asset Types\SkeletonDataAsset.cs:173
UnityEngine.Debug:LogError(Object, Object)
Spine.Unity.SkeletonDataAsset:GetSkeletonData(Boolean) (at Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs:176)
Spine.Unity.SkeletonRenderer:Initialize(Boolean, Boolean) (at Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs:377)
Spine.Unity.SkeletonAnimation:Initialize(Boolean, Boolean) (at Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs:169)
Spine.Unity.Editor.DataReloadHandler:ReloadAllActiveSkeletonsEditMode() (at Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs:103)
Spine.Unity.Editor.DataReloadHandler:OnPlaymodeStateChanged(PlayModeStateChange) (at Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs:59)
Spine.Unity.Editor.SpineEditorUtilities:Initialize() (at Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs:211)
UnityEditor.EditorApplication:Internal_CallDelayFunctions()
■Atk3aのエクスポートをチェックボックスから外したデータをUnityへインポートしました
・こちらは概ね問題なく動作しているようです。しかし、Spineエディタで作成したAtk3aアニメの何が問題なのか分かりません。
■確認した現象(Unityへインポート:ランタイム3.8)
・今までの3.8バージョンでAtk3aをエクスポートしたもの、しないもの2種類をUnityへインポートしました
1.左目に非表示にしたスライムのパーツが現れ消えません。
2.スキンがいくつか反映されず、メッシュが歪んでいます
3.atk3aを出力したスケルトンデータが4.0と同様に正しく生成されないことがありました(この現象は再現が安定しません)
・これら3つの現象はatk3aの有無に関わらずどちらも発生しました
■問題切り分けのため、Unityプロジェクトを新規作成し、最小の環境で以下の2パターンをテストしました
・4.0の環境でAtk3aをエクスポート、非エクスポート2種類のSpineDataで検証
・3.8の環境でAtk3aをエクスポート、非エクスポート2種類のSpineDataで検証
・結果:4.0は同様の症状が、3.8は上記の2と3の現象は起こりませんでしたが、1のスライムのパーツ表示は解消されませんでした。
試したことは以上となります。
どうもSpineプロジェクトファイル自体に何か問題があるように思いますが、何が原因なのか私は分かりません。
調査をしていただくことは可能でしょうか?