【Cubism SDKのバージョン】
Cubism 5 SDK for Unity R4(5-r.4)
【OS名・バージョン】
Windows 11
【Unityバージョン】
Unity 2022.3.62f2
【不具合の状況】
Unityプロジェクトへ既にインポート済みの.motion3.jsonを、同名の新しいモーションデータで上書きして再インポートしたところ、以下の例外が発生しました。
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Live2D.Cubism.Framework.MotionFade.CubismFadeMotionData.CreateInstance(...)
at Assets/Live2D/Cubism/Framework/MotionFade/CubismFadeMotionData.cs:160
at Live2D.Cubism.Framework.MotionFade.CubismFadeMotionImporter.CreateFadeMotionData(...)
at Assets/Live2D/Cubism/Framework/MotionFade/Editor/CubismFadeMotionImporter.cs:361
CubismAssetProcessor : Following error occurred while importing
Assets/Models/.../motions/s01_50a_finish LV1.motion3.json
上書き前の.motion3.jsonはCurveCountが28、上書き後はCurveCountが29でした。
新しいモーションでは、新たに使用するパラメータが1つ追加されています。
確認したところ、既に生成されていた同名の.fade.assetでは、以下の配列が以前の28要素のままになっていました。
・ParameterIds
・ParameterCurves
・ParameterFadeInTimes
・ParameterFadeOutTimes
CubismFadeMotionData.CreateInstance()では、新規Fadeデータを作成する場合はmotion3Json.Curves.Lengthに合わせて配列を確保していますが、既存のCubismFadeMotionDataを更新する処理では配列サイズを更新せず、motion3Json.Curves.Lengthまでループしているように見えます。
そのため、今回のようにカーブ数が28から29へ増えた場合、既存の28要素の配列へ29番目の値を書き込もうとしてIndexOutOfRangeExceptionが発生しているようです。
【再現手順】
1. CurveCountが28の.motion3.jsonをUnityへインポートする
2. .anim、.fade.asset、モデル名.fadeMotionList.assetが生成されることを確認する
3. 同じファイル名の.motion3.jsonを、使用パラメータを1つ追加したCurveCount 29のデータで上書きする
4. Unityで再インポートする
5. CubismFadeMotionData.CreateInstance()でIndexOutOfRangeExceptionが発生する
【期待する動作】
.motion3.jsonのカーブ数が変更された場合でも、既存の.fade.asset内の各配列が現在のカーブ数に合わせて更新され、正常に再インポートされることを期待します。
【実際の動作】
既存の.fade.assetの配列サイズが以前のカーブ数のまま再利用されるため、カーブ数が増えた場合にIndexOutOfRangeExceptionが発生します。
【回避方法】
該当する.fade.assetをUnity上で削除してから.motion3.jsonを再インポートすると、29要素の.fade.assetが新規生成され、エラーは解消しました。
再生成後はモデル名.fadeMotionList.assetにも新しい.fade.assetが登録され、Missing参照がないことを確認しています。
【質問】
.motion3.jsonの上書き更新によって使用パラメータ数/カーブ数が増減することは通常想定される操作だと思いますが、この挙動はSDKの不具合でしょうか。
また、今後のSDKで、既存の.fade.assetを更新する際に各配列を現在のmotion3Json.Curves.Lengthへ合わせる対応予定があるか、ご確認いただけますでしょうか。
@koha 様
いつも弊社製品をご愛顧のほど誠にありがとうございます。
Live2D スタッフでございます。
.motion3.jsonの上書き更新によって使用パラメータ数/カーブ数が増減することは通常想定される操作だと思いますが、この挙動はSDKの不具合でしょうか。
はい、確認したところ、こちらはCubism SDKの不具合になります。
また、今後のSDKで、既存の.fade.assetを更新する際に各配列を現在のmotion3Json.Curves.Lengthへ合わせる対応予定があるか、ご確認いただけますでしょうか。
こちらの修正内容につきましては、今後の更新で対応いたします。
ご迷惑をおかけしてしまい誠に申し訳ありませんでした。
どうぞよろしくお願いいたします。