2024-10-28 02:06:35 +09:00
|
|
|
|
#if MA_VRCSDK3_AVATARS
|
|
|
|
|
|
|
|
|
|
using modular_avatar_tests;
|
2024-02-26 01:03:28 -08:00
|
|
|
|
using nadena.dev.modular_avatar.animation;
|
|
|
|
|
using nadena.dev.modular_avatar.core;
|
|
|
|
|
using nadena.dev.modular_avatar.core.editor;
|
|
|
|
|
using nadena.dev.ndmf;
|
2025-02-16 22:25:12 -08:00
|
|
|
|
using nadena.dev.ndmf.animator;
|
2024-02-26 01:03:28 -08:00
|
|
|
|
using NUnit.Framework;
|
2025-03-07 18:41:26 -08:00
|
|
|
|
using UnityEditor.Animations;
|
2024-02-26 01:03:28 -08:00
|
|
|
|
using UnityEngine;
|
2025-03-07 18:41:26 -08:00
|
|
|
|
using VRC.SDK3.Avatars.Components;
|
2024-02-26 01:03:28 -08:00
|
|
|
|
using BuildContext = nadena.dev.ndmf.BuildContext;
|
|
|
|
|
|
|
|
|
|
namespace UnitTests.MergeAnimatorTests
|
|
|
|
|
{
|
|
|
|
|
internal class MergeSingleTests : TestBase
|
|
|
|
|
{
|
|
|
|
|
[Test]
|
|
|
|
|
public void NoErrorWhenAnimatorIsNull()
|
|
|
|
|
{
|
|
|
|
|
var av = CreateRoot("root");
|
|
|
|
|
|
|
|
|
|
var merge = av.AddComponent<ModularAvatarMergeAnimator>();
|
|
|
|
|
|
|
|
|
|
var ctx = new BuildContext(av, null);
|
|
|
|
|
ctx.ActivateExtensionContext<ModularAvatarContext>();
|
2025-02-16 22:25:12 -08:00
|
|
|
|
ctx.ActivateExtensionContextRecursive<AnimatorServicesContext>();
|
2024-02-26 01:03:28 -08:00
|
|
|
|
|
2025-02-16 22:25:12 -08:00
|
|
|
|
var errors = ErrorReport.CaptureErrors(() =>
|
|
|
|
|
{
|
|
|
|
|
new MergeAnimatorProcessor().OnPreprocessAvatar(av, ctx);
|
|
|
|
|
ctx.DeactivateAllExtensionContexts();
|
|
|
|
|
});
|
2024-02-26 01:03:28 -08:00
|
|
|
|
|
|
|
|
|
Assert.IsEmpty(errors);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void MergeAnimationOverrideController()
|
|
|
|
|
{
|
|
|
|
|
var av = CreateRoot("root");
|
|
|
|
|
|
|
|
|
|
var merge = av.AddComponent<ModularAvatarMergeAnimator>();
|
|
|
|
|
merge.animator = LoadAsset<AnimatorOverrideController>("AOC_Override.overrideController");
|
|
|
|
|
|
|
|
|
|
var ctx = new BuildContext(av, null);
|
|
|
|
|
ctx.ActivateExtensionContext<ModularAvatarContext>();
|
2025-02-16 22:25:12 -08:00
|
|
|
|
ctx.ActivateExtensionContextRecursive<AnimatorServicesContext>();
|
2024-02-26 01:03:28 -08:00
|
|
|
|
|
2025-02-16 22:25:12 -08:00
|
|
|
|
var errors = ErrorReport.CaptureErrors(() =>
|
|
|
|
|
{
|
|
|
|
|
new MergeAnimatorProcessor().OnPreprocessAvatar(av, ctx);
|
|
|
|
|
ctx.DeactivateAllExtensionContexts();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
ctx.DeactivateAllExtensionContexts();
|
2024-02-26 01:03:28 -08:00
|
|
|
|
|
|
|
|
|
Assert.IsEmpty(errors);
|
|
|
|
|
|
|
|
|
|
var state = FindStateInLayer(findFxLayer(av, "Target"), "Anim1");
|
|
|
|
|
Assert.IsTrue(state.motion.name.StartsWith("Anim2"));
|
|
|
|
|
}
|
2025-03-07 18:41:26 -08:00
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
public void MergeAnimation_ForcesFirstLayerToWeightOne()
|
|
|
|
|
{
|
|
|
|
|
var av = CreateRoot("root");
|
|
|
|
|
|
|
|
|
|
var controller = new AnimatorController();
|
|
|
|
|
var stateMachine = new AnimatorStateMachine();
|
|
|
|
|
stateMachine.name = "test machine";
|
|
|
|
|
|
|
|
|
|
controller.AddLayer(new AnimatorControllerLayer()
|
|
|
|
|
{
|
|
|
|
|
name = "Base",
|
|
|
|
|
stateMachine = stateMachine,
|
|
|
|
|
defaultWeight = 0
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var merge = av.AddComponent<ModularAvatarMergeAnimator>();
|
|
|
|
|
merge.animator = controller;
|
|
|
|
|
merge.layerType = VRCAvatarDescriptor.AnimLayerType.FX;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var ctx = new BuildContext(av, null);
|
|
|
|
|
ctx.ActivateExtensionContext<ModularAvatarContext>();
|
|
|
|
|
ctx.ActivateExtensionContextRecursive<AnimatorServicesContext>();
|
|
|
|
|
|
|
|
|
|
var errors = ErrorReport.CaptureErrors(() =>
|
|
|
|
|
{
|
|
|
|
|
new MergeAnimatorProcessor().OnPreprocessAvatar(av, ctx);
|
|
|
|
|
ctx.DeactivateAllExtensionContexts();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
ctx.DeactivateAllExtensionContexts();
|
|
|
|
|
|
|
|
|
|
Assert.IsEmpty(errors);
|
|
|
|
|
|
|
|
|
|
var layer = ((AnimatorController) FindFxController(av).animatorController).layers[^1];
|
|
|
|
|
Assert.AreEqual(1, layer.defaultWeight);
|
|
|
|
|
}
|
2024-02-26 01:03:28 -08:00
|
|
|
|
}
|
2024-10-28 02:06:35 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|