VRCQuestTools icon indicating copy to clipboard operation
VRCQuestTools copied to clipboard

ArgumentNullException in VRCQuestToolsActualPerformanceCallback with newly created PipelineManager component

Open anatawa12 opened this issue 1 year ago • 2 comments

Describe the bug / バグの説明

PipelineManager.blueprintIdのデフォルト値がnullなためエラーになるようです。

シーンを開き直すとUnityのSerializationの仕様により null が 空文字列 に変化するため問題がなくなります

ArgumentNullException: Value cannot be null.
Parameter name: key
System.Collections.Generic.Dictionary`2[TKey,TValue].TryInsert (TKey key, TValue value, System.Collections.Generic.InsertionBehavior behavior) (at <b904252b6b4e4277834bcca7e51f318d>:0)
System.Collections.Generic.Dictionary`2[TKey,TValue].set_Item (TKey key, TValue value) (at <b904252b6b4e4277834bcca7e51f318d>:0)
KRT.VRCQuestTools.Ndmf.VRCQuestToolsActualPerformanceCallback.OnPreprocessAvatar (UnityEngine.GameObject avatarGameObject) (at ./Packages/com.github.kurotu.vrc-quest-tools/Editor/NDMF/VRCQuestToolsActualPerformanceCallback.cs:32)
VRC.SDKBase.Editor.BuildPipeline.VRCBuildPipelineCallbacks.OnPreprocessAvatar (UnityEngine.GameObject avatarGameObject) (at <f06a43e46d164508b5f908707738d69a>:0)
UnityEngine.Debug:LogException(Exception)
VRC.SDKBase.Editor.BuildPipeline.VRCBuildPipelineCallbacks:OnPreprocessAvatar(GameObject)
nadena.dev.ndmf.ApplyOnPlay:MaybeProcessAvatar(OnDemandSource, MonoBehaviour) (at ./Packages/nadena.dev.ndmf/Editor/ApplyOnPlay.cs:98)
nadena.dev.ndmf.runtime.AvatarActivator:Awake() (at ./Packages/nadena.dev.ndmf/Runtime/ApplyOnPlayGlobalActivator.cs:187)
UnityEngine.GameObject:AddComponent()
nadena.dev.ndmf.runtime.RuntimeUtil:GetOrAddComponent(GameObject) (at ./Packages/nadena.dev.ndmf/Runtime/RuntimeUtil.cs:33)
nadena.dev.ndmf.runtime.ApplyOnPlayGlobalActivator:Awake() (at ./Packages/nadena.dev.ndmf/Runtime/ApplyOnPlayGlobalActivator.cs:125)

To Reproduce / 再現手順

  1. (必須か不明) Enter Play Mode SettingsのReload Domain / Reload Sceneを無効にする
  2. ~~(必須か不明) Pipeline Managerのinspectorを閉じておく(Pipeline Manager (Script) の左の▼を▶にしておく)~~ 不要
  3. 新規シーンを作成
  4. 新規GameObjectを作成し、AnimatorとVRC Avatar Descriptor (とPipeline Manager)を作成する
  5. Playモードに入る

Expected behavior / 期待する動作

エラーにならない

Screenshots / スクリーンショット

No response

Used assets / 使用したアセット

特になし

VRCQuestTools version / VRCQuestToolsのバージョン

2.5.4

Unity version / Unityのバージョン

2022.3.22f1

Additional context / その他の情報

一度Playモードから抜けると発生しなくなるため重大な問題ではありません

anatawa12 avatar Oct 11 '24 13:10 anatawa12

起きている現象としては理解できたので修正します

ところで IVRCSDKPreprocessAvatarCallback ってPlayモードでも呼ばれるのでしたっけ?どうだったかすぐ思い出せず。 コールスタックを見た感じNDMFから呼ばれているので、通常と異なる挙動であればどこかに記載してあると良さそうです。

kurotu avatar Oct 11 '24 14:10 kurotu

NDMFがVRCFury互換性等々のためにIVRCSDKPreprocessAvatarCallbackを呼び出すようになってますね。 NDMFに限らず、多くの非破壊ツールの環境でIVRCSDKPreprocessAvatarCallbackがPlayモードのタイミングで呼ばれるようになってます

anatawa12 avatar Oct 11 '24 15:10 anatawa12

v2.5.5で修正

kurotu avatar Nov 16 '24 12:11 kurotu