使用パラメータ数が増えたmotion3.jsonを上書き再インポートするとIndexOutOfRangeExceptionが発生する

【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へ合わせる対応予定があるか、ご確認いただけますでしょうか。

こちらの修正内容につきましては、今後の更新で対応いたします。

ご迷惑をおかけしてしまい誠に申し訳ありませんでした。
どうぞよろしくお願いいたします。