bdunderscore / modular-avatar

Other
449 stars 54 forks source link

特定のアバターにおいてMAを使用する際にKeyNotFoundExceptionのエラーが発生します #772

Open u4-natsuo opened 4 months ago

u4-natsuo commented 4 months ago

特定のアバターに対してMAを使用する際に下記のエラーが発生します。 お手数ですが、ご確認をよろしくお願いいたします。

使用アバター:https://xelevia.booth.pm/items/3002686 導入システム:https://booth.pm/ja/items/5509228 使用環境:Unity 2022.3.6f1      VRChat SDK 3.5.1      Modular Avatar 1.9.8

エラー内容:(下記のとおり)

System.Collections.Generic.KeyNotFoundException: The given key 'Action' was not present in the dictionary. at System.Collections.Generic.Dictionary2[TKey,TValue].get_Item (TKey key) [0x0001e] in <eef08f56e2e042f1b3027eca477293d9>:0 at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.MergeSingle (nadena.dev.modular_avatar.core.editor.BuildContext context, nadena.dev.modular_avatar.animation.AnimatorCombiner session, nadena.dev.modular_avatar.core.ModularAvatarMergeAnimator merge) [0x00071] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:153 at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.ProcessLayerType (nadena.dev.modular_avatar.core.editor.BuildContext context, VRC.SDK3.Avatars.Components.VRCAvatarDescriptor+AnimLayerType layerType, System.Collections.Generic.List1[T] toMerge) [0x00140] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:128 at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.OnPreprocessAvatar (UnityEngine.GameObject avatarGameObject, nadena.dev.modular_avatar.core.editor.BuildContext context) [0x000b5] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:89 at nadena.dev.modular_avatar.core.editor.plugin.MergeAnimatorPluginPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.modular-avatar\Editor\PluginDefinition\PluginDefinition.cs:177 at nadena.dev.ndmf.Pass1[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:337 at System.Collections.Generic.Dictionary2[TKey,TValue].get_Item (TKey key) [0x0001e] in :0 at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.MergeSingle (nadena.dev.modular_avatar.core.editor.BuildContext context, nadena.dev.modular_avatar.animation.AnimatorCombiner session, nadena.dev.modular_avatar.core.ModularAvatarMergeAnimator merge) [0x00071] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:153 at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.ProcessLayerType (nadena.dev.modular_avatar.core.editor.BuildContext context, VRC.SDK3.Avatars.Components.VRCAvatarDescriptor+AnimLayerType layerType, System.Collections.Generic.List1[T] toMerge) [0x00140] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:128 at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.OnPreprocessAvatar (UnityEngine.GameObject avatarGameObject, nadena.dev.modular_avatar.core.editor.BuildContext context) [0x000b5] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:89 at nadena.dev.modular_avatar.core.editor.plugin.MergeAnimatorPluginPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.modular-avatar\Editor\PluginDefinition\PluginDefinition.cs:177 at nadena.dev.ndmf.Pass1[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:337

bdunderscore commented 4 months ago

これについては調査する予定です

u4-natsuo commented 4 months ago

申し訳ありません。 上記内容につきましては、自己解決しました。 古いアバターだったため、Atatar descriptorが問題だったようです。 既存のAtatar descriptorゆ削除したうえで入れ直したら起動しました。

bdunderscore commented 4 months ago

わかりました。しかし、MA側にバグがあるのは変わりません。上記のスタックトレースで十分調査できると思いますので忘れないようにここまま開いたままにさせてください。

u4-natsuo commented 4 months ago

承知しました お手数ですが、よろしくお願いいたします

appleblossomvr commented 4 months ago

Howdy! I also ran into this error on my Kikyo avatar, and the issue ended up being with the Playable Layers dictionary.

image

As you can see, I don't have an Action layer slot, but instead two FX layer slots. So, when searching for the Action layer in the dictionary, the key did not exist.

To fix this, I hit the "Reset to Default" button and re-assigned the layers. This could also be fixed on the plugin side by checking if the key exists before performing the MA Merge Animator.

image

Hope this helps resolve the issue! And here's my Stack Trace before I reset the layers:

System.Collections.Generic.KeyNotFoundException: The given key 'Action' was not present in the dictionary.
  at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x0001e] in <eef08f56e2e042f1b3027eca477293d9>:0 
  at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.MergeSingle (nadena.dev.modular_avatar.core.editor.BuildContext context, nadena.dev.modular_avatar.animation.AnimatorCombiner session, nadena.dev.modular_avatar.core.ModularAvatarMergeAnimator merge) [0x00071] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:153 
  at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.ProcessLayerType (nadena.dev.modular_avatar.core.editor.BuildContext context, VRC.SDK3.Avatars.Components.VRCAvatarDescriptor+AnimLayerType layerType, System.Collections.Generic.List`1[T] toMerge) [0x00140] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:128 
  at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.OnPreprocessAvatar (UnityEngine.GameObject avatarGameObject, nadena.dev.modular_avatar.core.editor.BuildContext context) [0x000b5] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:89 
  at nadena.dev.modular_avatar.core.editor.plugin.MergeAnimatorPluginPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.modular-avatar\Editor\PluginDefinition\PluginDefinition.cs:177 
  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:337 
  at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x0001e] in <eef08f56e2e042f1b3027eca477293d9>:0 
  at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.MergeSingle (nadena.dev.modular_avatar.core.editor.BuildContext context, nadena.dev.modular_avatar.animation.AnimatorCombiner session, nadena.dev.modular_avatar.core.ModularAvatarMergeAnimator merge) [0x00071] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:153 
  at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.ProcessLayerType (nadena.dev.modular_avatar.core.editor.BuildContext context, VRC.SDK3.Avatars.Components.VRCAvatarDescriptor+AnimLayerType layerType, System.Collections.Generic.List`1[T] toMerge) [0x00140] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:128 
  at nadena.dev.modular_avatar.core.editor.MergeAnimatorProcessor.OnPreprocessAvatar (UnityEngine.GameObject avatarGameObject, nadena.dev.modular_avatar.core.editor.BuildContext context) [0x000b5] in .\Packages\nadena.dev.modular-avatar\Editor\MergeAnimatorProcessor.cs:89 
  at nadena.dev.modular_avatar.core.editor.plugin.MergeAnimatorPluginPass.Execute (nadena.dev.ndmf.BuildContext context) [0x00000] in .\Packages\nadena.dev.modular-avatar\Editor\PluginDefinition\PluginDefinition.cs:177 
  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:337 
bdunderscore commented 4 months ago

Thanks! This might still need to be an error, since the avatar descriptor is corrupt and it’s not clear what to do if eg there are two FX layers… but at least it can be one that is more clear about what is wrong.