diff --git a/Editor/ParamsUsage/MAParametersIntrospection.cs b/Editor/ParamsUsage/MAParametersIntrospection.cs index 1924c2d0..9c3d4e46 100644 --- a/Editor/ParamsUsage/MAParametersIntrospection.cs +++ b/Editor/ParamsUsage/MAParametersIntrospection.cs @@ -87,7 +87,7 @@ namespace nadena.dev.modular_avatar.core.editor _component, PluginDefinition.Instance, paramType) { IsAnimatorOnly = animatorOnly, - WantSynced = !p.localOnly, + WantSynced = !p.localOnly && !animatorOnly, IsHidden = p.internalParameter, DefaultValue = p.defaultValue }; diff --git a/Editor/RenameParametersHook.cs b/Editor/RenameParametersHook.cs index 25ce41ef..afbf83ba 100644 --- a/Editor/RenameParametersHook.cs +++ b/Editor/RenameParametersHook.cs @@ -136,6 +136,7 @@ namespace nadena.dev.modular_avatar.core.editor if (ResolvedParameter.syncType == ParameterSyncType.NotSynced) { ResolvedParameter.syncType = info.ResolvedParameter.syncType; + ResolvedParameter.localOnly = info.ResolvedParameter.localOnly; } else if (ResolvedParameter.syncType != info.ResolvedParameter.syncType && info.ResolvedParameter.syncType != ParameterSyncType.NotSynced) { TypeConflict = true; @@ -734,6 +735,7 @@ namespace nadena.dev.modular_avatar.core.editor ParameterConfig parameterConfig = param; parameterConfig.nameOrPrefix = remapTo; parameterConfig.remapTo = remapTo; + parameterConfig.localOnly = parameterConfig.localOnly || param.syncType == ParameterSyncType.NotSynced; var info = new ParameterInfo() { ResolvedParameter = parameterConfig, diff --git a/UnitTests~/RenameParametersTests/RenameParametersTests.cs b/UnitTests~/RenameParametersTests/RenameParametersTests.cs index 983fd328..8942b5e4 100644 --- a/UnitTests~/RenameParametersTests/RenameParametersTests.cs +++ b/UnitTests~/RenameParametersTests/RenameParametersTests.cs @@ -306,6 +306,45 @@ namespace modular_avatar_tests.RenameParametersTests Assert.AreNotEqual(fuga.name, "Fuga"); // should be auto-renamed } + + [Test] + public void AnimatorOnlyAndLocalParameterShouldNotSync() + { + var root = CreateRoot("x"); + + var c1 = CreateChild(root, "c1"); + var c2 = CreateChild(root, "c2"); + + var p1 = c1.AddComponent(); + var p2 = c2.AddComponent(); + + p1.parameters = new() + { + new() + { + nameOrPrefix = "a", + syncType = ParameterSyncType.NotSynced, + localOnly = false + } + }; + p2.parameters = new() + { + new() + { + nameOrPrefix = "a", + syncType = ParameterSyncType.Int, + localOnly = true + } + }; + + AvatarProcessor.ProcessAvatar(root); + + var expParams = root.GetComponent().expressionParameters.parameters + .Select(p => new KeyValuePair(p.name, p)) + .ToImmutableDictionary(); + + Assert.IsFalse(expParams["a"].networkSynced); + } } }