From 4f89c4aea2fe2b4fa7498328b9ff74c47d9cd73d Mon Sep 17 00:00:00 2001 From: kaikoga Date: Sun, 27 Oct 2024 18:48:29 +0900 Subject: [PATCH] chore: early return if VRCSDK project but not VRChat avatar --- Editor/Animation/AnimationDatabase.cs | 1 + Editor/Animation/AnimationServicesContext.cs | 2 ++ Editor/Animation/AnimationUtil.cs | 2 ++ Editor/Animation/PathMappings.cs | 27 ++++++++++--------- .../FixupPasses/FixupExpressionsMenuPass.cs | 2 ++ Editor/MergeAnimatorProcessor.cs | 1 + .../OptimizationPasses/PruneParametersPass.cs | 2 ++ .../AnimationGeneration/ReactiveObjectPass.cs | 2 ++ Editor/RenameParametersHook.cs | 2 ++ 9 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Editor/Animation/AnimationDatabase.cs b/Editor/Animation/AnimationDatabase.cs index dd594092..cb8a1a8d 100644 --- a/Editor/Animation/AnimationDatabase.cs +++ b/Editor/Animation/AnimationDatabase.cs @@ -158,6 +158,7 @@ namespace nadena.dev.modular_avatar.animation #if MA_VRCSDK3_AVATARS var avatarDescriptor = context.AvatarDescriptor; + if (!avatarDescriptor) return; foreach (var layer in avatarDescriptor.baseAnimationLayers) { diff --git a/Editor/Animation/AnimationServicesContext.cs b/Editor/Animation/AnimationServicesContext.cs index bc63cec9..57ad5dd0 100644 --- a/Editor/Animation/AnimationServicesContext.cs +++ b/Editor/Animation/AnimationServicesContext.cs @@ -92,6 +92,8 @@ namespace nadena.dev.modular_avatar.animation public void AddPropertyDefinition(AnimatorControllerParameter paramDef) { #if MA_VRCSDK3_AVATARS + if (!_context.AvatarDescriptor) return; + var fx = (AnimatorController) _context.AvatarDescriptor.baseAnimationLayers .First(l => l.type == VRCAvatarDescriptor.AnimLayerType.FX) diff --git a/Editor/Animation/AnimationUtil.cs b/Editor/Animation/AnimationUtil.cs index aa026548..1016cba9 100644 --- a/Editor/Animation/AnimationUtil.cs +++ b/Editor/Animation/AnimationUtil.cs @@ -53,6 +53,8 @@ namespace nadena.dev.modular_avatar.animation // This helps reduce the risk that we'll accidentally modify the original assets. #if MA_VRCSDK3_AVATARS + if (!context.AvatarDescriptor) return; + context.AvatarDescriptor.baseAnimationLayers = CloneLayers(context, context.AvatarDescriptor.baseAnimationLayers); context.AvatarDescriptor.specialAnimationLayers = diff --git a/Editor/Animation/PathMappings.cs b/Editor/Animation/PathMappings.cs index 8ea314bc..4d53f6a2 100644 --- a/Editor/Animation/PathMappings.cs +++ b/Editor/Animation/PathMappings.cs @@ -369,21 +369,24 @@ namespace nadena.dev.modular_avatar.animation Profiler.EndSample(); #if MA_VRCSDK3_AVATARS - var layers = context.AvatarDescriptor.baseAnimationLayers - .Concat(context.AvatarDescriptor.specialAnimationLayers); - - Profiler.BeginSample("ApplyMappingsToAvatarMasks"); - foreach (var layer in layers) + if (context.AvatarDescriptor) { - ApplyMappingsToAvatarMask(layer.mask); + var layers = context.AvatarDescriptor.baseAnimationLayers + .Concat(context.AvatarDescriptor.specialAnimationLayers); - if (layer.animatorController is AnimatorController ac) - // By this point, all AnimationOverrideControllers have been collapsed into an ephemeral - // AnimatorController so we can safely modify the controller in-place. - foreach (var acLayer in ac.layers) - ApplyMappingsToAvatarMask(acLayer.avatarMask); + Profiler.BeginSample("ApplyMappingsToAvatarMasks"); + foreach (var layer in layers) + { + ApplyMappingsToAvatarMask(layer.mask); + + if (layer.animatorController is AnimatorController ac) + // By this point, all AnimationOverrideControllers have been collapsed into an ephemeral + // AnimatorController so we can safely modify the controller in-place. + foreach (var acLayer in ac.layers) + ApplyMappingsToAvatarMask(acLayer.avatarMask); + } + Profiler.EndSample(); } - Profiler.EndSample(); #endif Profiler.EndSample(); diff --git a/Editor/FixupPasses/FixupExpressionsMenuPass.cs b/Editor/FixupPasses/FixupExpressionsMenuPass.cs index f4b549ee..4f36ec2b 100644 --- a/Editor/FixupPasses/FixupExpressionsMenuPass.cs +++ b/Editor/FixupPasses/FixupExpressionsMenuPass.cs @@ -19,6 +19,8 @@ namespace nadena.dev.modular_avatar.core.editor internal static void FixupExpressionsMenu(BuildContext context) { + if (!context.AvatarDescriptor) return; + context.AvatarDescriptor.customExpressions = true; var expressionsMenu = context.AvatarDescriptor.expressionsMenu; diff --git a/Editor/MergeAnimatorProcessor.cs b/Editor/MergeAnimatorProcessor.cs index b0af81ac..aa4dbcbc 100644 --- a/Editor/MergeAnimatorProcessor.cs +++ b/Editor/MergeAnimatorProcessor.cs @@ -65,6 +65,7 @@ namespace nadena.dev.modular_avatar.core.editor mergeSessions.Clear(); var descriptor = avatarGameObject.GetComponent(); + if (!descriptor) return; if (descriptor.baseAnimationLayers != null) InitSessions(descriptor.baseAnimationLayers); if (descriptor.specialAnimationLayers != null) InitSessions(descriptor.specialAnimationLayers); diff --git a/Editor/OptimizationPasses/PruneParametersPass.cs b/Editor/OptimizationPasses/PruneParametersPass.cs index a38b3655..801fb3e9 100644 --- a/Editor/OptimizationPasses/PruneParametersPass.cs +++ b/Editor/OptimizationPasses/PruneParametersPass.cs @@ -9,6 +9,8 @@ namespace nadena.dev.modular_avatar.core.editor { protected override void Execute(ndmf.BuildContext context) { + if (!context.AvatarDescriptor) return; + var expParams = context.AvatarDescriptor.expressionParameters; if (expParams != null && context.IsTemporaryAsset(expParams)) { diff --git a/Editor/ReactiveObjects/AnimationGeneration/ReactiveObjectPass.cs b/Editor/ReactiveObjects/AnimationGeneration/ReactiveObjectPass.cs index ae77c80f..2d73a816 100644 --- a/Editor/ReactiveObjects/AnimationGeneration/ReactiveObjectPass.cs +++ b/Editor/ReactiveObjects/AnimationGeneration/ReactiveObjectPass.cs @@ -34,6 +34,8 @@ namespace nadena.dev.modular_avatar.core.editor internal void Execute() { + if (!context.AvatarDescriptor) return; + // Having a WD OFF layer after WD ON layers can break WD. We match the behavior of the existing states, // and if mixed, use WD ON to maximize compatibility. _writeDefaults = MergeAnimatorProcessor.ProbeWriteDefaults(FindFxController().animatorController as AnimatorController) ?? true; diff --git a/Editor/RenameParametersHook.cs b/Editor/RenameParametersHook.cs index 5bd401c3..25ce41ef 100644 --- a/Editor/RenameParametersHook.cs +++ b/Editor/RenameParametersHook.cs @@ -159,6 +159,8 @@ namespace nadena.dev.modular_avatar.core.editor public void OnPreprocessAvatar(GameObject avatar, BuildContext context) { + if (!context.AvatarDescriptor) return; + _context = context; var syncParams = WalkTree(avatar);