Closed c-colloid closed 4 months ago
エラー文的にFXレイヤーのステートに原因がありそうだったので少し検証してみました
結論:詳細な発生条件は分かりませんが、特定のサブステートに対してエラーが発生するようです そのサブステートを消した状態でテストしたところエラーは出なくなりました
詳細:エラーに出てくるFist R [2]
のステートを探し出し消してみました
その結果、それだけだと同じサブステート内にある他のステートでエラーが発生するようになりました
次にサブステート毎消してみたところもう一つのサブステートにエラーが移ったのでそちらも消した所でエラーが発生しなくなりました
(消したのは画像内の2つのサブステート)
ただし、サブステートは他のレイヤーでも使われており(例えばFacialExlusiveレイヤーなんかはほぼ同じ構成で作られています)、なぜここだけエラーが発生するのかは謎です
他に試したこと
また、拡張を入れてないアバターにエラーが無くなった時点で他のNDMF拡張の再導入も試してみました結果 FaceEmoだけエラーが発生する事が確認されました これも同じように特定のサブステートだけエラーになるという状況が確認できました 本来はIssueを分けるべきかもしれませんが、ほぼ同じ原因で起きていそうなのでこちらにまとめさせてもらいます
エラー文を以下に添付します
System.Collections.Generic.KeyNotFoundException: The given key 'L0 R0 (UnityEngine.AnimatorState)' was not present in the dictionary.
at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x0001e] in <eef08f56e2e042f1b3027eca477293d9>:0
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.DeepCopyStateMachine (UnityEditor.Animations.AnimatorStateMachine stateMachine) [0x0021b] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:322
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.DeepCopyChildAnimatorStateMachine (UnityEditor.Animations.ChildAnimatorStateMachine stateMachine) [0x00016] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:453
at (wrapper delegate-invoke) System.Func`2[UnityEditor.Animations.ChildAnimatorStateMachine,UnityEditor.Animations.ChildAnimatorStateMachine].invoke_TResult_T(UnityEditor.Animations.ChildAnimatorStateMachine)
at System.Linq.Enumerable+SelectArrayIterator`2[TSource,TResult].ToArray () [0x00012] in <de4a1a1490a74771a34fee0d1d586658>:0
at System.Linq.Enumerable.ToArray[TSource] (System.Collections.Generic.IEnumerable`1[T] source) [0x0001f] in <de4a1a1490a74771a34fee0d1d586658>:0
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.DeepCopyStateMachine (UnityEditor.Animations.AnimatorStateMachine stateMachine) [0x000ff] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:313
at KRT.VRCQuestTools.Utils.UnityAnimationUtility+<>c.<DeepCopyAnimatorController>b__8_0 (UnityEditor.Animations.AnimatorControllerLayer layer) [0x0004d] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:278
at System.Linq.Enumerable+SelectArrayIterator`2[TSource,TResult].ToArray () [0x00012] in <de4a1a1490a74771a34fee0d1d586658>:0
at System.Linq.Enumerable.ToArray[TSource] (System.Collections.Generic.IEnumerable`1[T] source) [0x0001f] in <de4a1a1490a74771a34fee0d1d586658>:0
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.DeepCopyAnimatorController (UnityEditor.Animations.AnimatorController controller) [0x00011] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:269
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.ReplaceAnimationClips (UnityEngine.RuntimeAnimatorController controller, System.Boolean saveAsAsset, System.String saveDir, System.Collections.Generic.Dictionary`2[TKey,TValue] newMotions) [0x00095] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:162
at KRT.VRCQuestTools.Models.VRChat.AvatarConverter.ConvertAnimatorControllersForQuest (UnityEngine.RuntimeAnimatorController[] controllers, System.Boolean saveAsAsset, System.String assetsDirectory, System.Collections.Generic.Dictionary`2[TKey,TValue] convertedMotions, KRT.VRCQuestTools.Models.VRChat.AvatarConverter+RuntimeAnimatorProgressCallback progressCallback) [0x0007f] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Models\VRChat\AvatarConverter.cs:356
--- End of stack trace from previous location where exception was thrown ---
at KRT.VRCQuestTools.Models.VRChat.AvatarConverter.ConvertAnimatorControllersForQuest (UnityEngine.RuntimeAnimatorController[] controllers, System.Boolean saveAsAsset, System.String assetsDirectory, System.Collections.Generic.Dictionary`2[TKey,TValue] convertedMotions, KRT.VRCQuestTools.Models.VRChat.AvatarConverter+RuntimeAnimatorProgressCallback progressCallback) [0x000ba] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Models\VRChat\AvatarConverter.cs:363
at KRT.VRCQuestTools.Models.VRChat.AvatarConverter.ConvertForQuestInPlace (KRT.VRCQuestTools.Components.AvatarConverterSettings setting, KRT.VRCQuestTools.Models.ComponentRemover remover, System.Boolean saveAssetsAsFile, System.String assetsDirectory, KRT.VRCQuestTools.Models.VRChat.AvatarConverter+ProgressCallback progressCallback) [0x00231] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Models\VRChat\AvatarConverter.cs:134
at KRT.VRCQuestTools.Ndmf.AvatarConverterTransformingPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00025] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\NDMF\Passes\AvatarConverterTransformingPass.cs:35
at nadena.dev.ndmf.Pass`1[T].nadena.dev.ndmf.IPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.ndmf\Editor\API\Fluent\Pass.cs:64
at nadena.dev.ndmf.ConcretePass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.ndmf\Editor\API\Solver\PluginResolver.cs:36
at nadena.dev.ndmf.BuildContext.RunPass (nadena.dev.ndmf.ConcretePass pass) [0x00124] in .\Packages\nadena.dev.ndmf\Editor\API\BuildContext.cs:350
at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x0001e] in <eef08f56e2e042f1b3027eca477293d9>:0
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.DeepCopyStateMachine (UnityEditor.Animations.AnimatorStateMachine stateMachine) [0x0021b] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:322
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.DeepCopyChildAnimatorStateMachine (UnityEditor.Animations.ChildAnimatorStateMachine stateMachine) [0x00016] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:453
at (wrapper delegate-invoke) System.Func`2[UnityEditor.Animations.ChildAnimatorStateMachine,UnityEditor.Animations.ChildAnimatorStateMachine].invoke_TResult_T(UnityEditor.Animations.ChildAnimatorStateMachine)
at System.Linq.Enumerable+SelectArrayIterator`2[TSource,TResult].ToArray () [0x00012] in <de4a1a1490a74771a34fee0d1d586658>:0
at System.Linq.Enumerable.ToArray[TSource] (System.Collections.Generic.IEnumerable`1[T] source) [0x0001f] in <de4a1a1490a74771a34fee0d1d586658>:0
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.DeepCopyStateMachine (UnityEditor.Animations.AnimatorStateMachine stateMachine) [0x000ff] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:313
at KRT.VRCQuestTools.Utils.UnityAnimationUtility+<>c.<DeepCopyAnimatorController>b__8_0 (UnityEditor.Animations.AnimatorControllerLayer layer) [0x0004d] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:278
at System.Linq.Enumerable+SelectArrayIterator`2[TSource,TResult].ToArray () [0x00012] in <de4a1a1490a74771a34fee0d1d586658>:0
at System.Linq.Enumerable.ToArray[TSource] (System.Collections.Generic.IEnumerable`1[T] source) [0x0001f] in <de4a1a1490a74771a34fee0d1d586658>:0
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.DeepCopyAnimatorController (UnityEditor.Animations.AnimatorController controller) [0x00011] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:269
at KRT.VRCQuestTools.Utils.UnityAnimationUtility.ReplaceAnimationClips (UnityEngine.RuntimeAnimatorController controller, System.Boolean saveAsAsset, System.String saveDir, System.Collections.Generic.Dictionary`2[TKey,TValue] newMotions) [0x00095] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Utils\UnityAnimationUtility.cs:162
at KRT.VRCQuestTools.Models.VRChat.AvatarConverter.ConvertAnimatorControllersForQuest (UnityEngine.RuntimeAnimatorController[] controllers, System.Boolean saveAsAsset, System.String assetsDirectory, System.Collections.Generic.Dictionary`2[TKey,TValue] convertedMotions, KRT.VRCQuestTools.Models.VRChat.AvatarConverter+RuntimeAnimatorProgressCallback progressCallback) [0x0007f] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Models\VRChat\AvatarConverter.cs:356
--- End of stack trace from previous location where exception was thrown ---
at KRT.VRCQuestTools.Models.VRChat.AvatarConverter.ConvertAnimatorControllersForQuest (UnityEngine.RuntimeAnimatorController[] controllers, System.Boolean saveAsAsset, System.String assetsDirectory, System.Collections.Generic.Dictionary`2[TKey,TValue] convertedMotions, KRT.VRCQuestTools.Models.VRChat.AvatarConverter+RuntimeAnimatorProgressCallback progressCallback) [0x000ba] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Models\VRChat\AvatarConverter.cs:363
at KRT.VRCQuestTools.Models.VRChat.AvatarConverter.ConvertForQuestInPlace (KRT.VRCQuestTools.Components.AvatarConverterSettings setting, KRT.VRCQuestTools.Models.ComponentRemover remover, System.Boolean saveAssetsAsFile, System.String assetsDirectory, KRT.VRCQuestTools.Models.VRChat.AvatarConverter+ProgressCallback progressCallback) [0x00231] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\Models\VRChat\AvatarConverter.cs:134
at KRT.VRCQuestTools.Ndmf.AvatarConverterTransformingPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00025] in .\Packages\com.github.kurotu.vrc-quest-tools\Editor\NDMF\Passes\AvatarConverterTransformingPass.cs:35
at nadena.dev.ndmf.Pass`1[T].nadena.dev.ndmf.IPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.ndmf\Editor\API\Fluent\Pass.cs:64
at nadena.dev.ndmf.ConcretePass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.ndmf\Editor\API\Solver\PluginResolver.cs:36
at nadena.dev.ndmf.BuildContext.RunPass (nadena.dev.ndmf.ConcretePass pass) [0x00124] in .\Packages\nadena.dev.ndmf\Editor\API\BuildContext.cs:350
(エラーの発生場所)
Animator Controllerの複製時に、サブステートマシンへのEntry Transition (サブステートマシン内のステートへの直接遷移)の複製に失敗していました。 この現象自体は修正できたのですが、複製に関して別の不具合も見えてきたので修正リリースは少し先になります。
v2.3.1 で修正しました
Describe the bug / バグの説明
2.3.0でNDMFを利用した非破壊アップロードをしようとすると変換中にエラーが発生するようになりました 2.2.2にダウングレード/2.3.0で手動変換を噛ませてからアップロードをするとエラーは発生しなくなりました
エラー内容
To Reproduce / 再現手順
2-1/2-2共に同じエラーが発生する
エラーが発生しなくなる
エラーは発生せず変換が完了しアップロードも問題なくできる
エラーは発生せず変換が完了しアップロードも問題なくできる
Expected behavior / 期待する動作
NDMFを利用してエラーが発生することなく変換がされアップロードが成功する
Screenshots / スクリーンショット
Used assets / 使用したアセット
アバター:Pon Booth
VRCQuestTools version / VRCQuestToolsのバージョン
2.3.0
Unity version / Unityのバージョン
2022.3.6f1
Additional context / その他の情報
シーン内にいくつかNDMF用のオブジェクトがありますが、これらは元々アバターの中に入っていたものでした 競合の可能性を考えて取り出してからテストしていますがエラーが発生しました アバターの中には入れていないので変換処理に影響は出ないと思われますが一応プロジェクト内に入れているNDMF対応拡張を記載しておきます
変換を噛ませた後ならば すべてのオブジェクトを再度アバター内に入れてからテストした場合でも問題なくアップロードが完了しました