mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-01-06 14:45:06 +08:00
c454bc1ed8
* Add integration test for blendshape sync * fix: blendshape sync not being processed This change refactors AnimationDatabase to be part of the same extension context as the TrackObjectRenames functionality (which is renamed back to PathMappings). This then allows us to sequence deactivation of this context to come after blendshape processing completes. Fixes: #461
44 lines
1.6 KiB
C#
44 lines
1.6 KiB
C#
using modular_avatar_tests;
|
|
using nadena.dev.modular_avatar.animation;
|
|
using nadena.dev.modular_avatar.core.editor;
|
|
using NUnit.Framework;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using VRC.SDK3.Avatars.Components;
|
|
|
|
public class ActiveAnimationRetargeterTests : TestBase
|
|
{
|
|
[Test]
|
|
public void SimpleRetarget()
|
|
{
|
|
var avatar = CreatePrefab("SimpleRetarget.prefab");
|
|
var descriptor = avatar.GetComponent<VRCAvatarDescriptor>();
|
|
|
|
// initialize context
|
|
var buildContext = new BuildContext(descriptor);
|
|
var pathMappings = buildContext.PluginBuildContext.ActivateExtensionContext<AnimationServicesContext>()
|
|
.PathMappings;
|
|
|
|
// get game objects
|
|
var changedChild = avatar.transform.Find("Toggled/Child");
|
|
var newParent = avatar.transform.Find("NewParent");
|
|
|
|
// do retargeting
|
|
var retargeter = new ActiveAnimationRetargeter(buildContext, new BoneDatabase(), changedChild);
|
|
var created = retargeter.CreateIntermediateObjects(newParent.gameObject);
|
|
retargeter.FixupAnimations();
|
|
|
|
// commit
|
|
buildContext.AnimationDatabase.Commit();
|
|
|
|
var clip = findFxClip(avatar, layerName: "retarget");
|
|
var curveBindings = AnimationUtility.GetCurveBindings(clip);
|
|
|
|
// Intermediate object must be created
|
|
Assert.That(created, Is.Not.EqualTo(newParent.gameObject));
|
|
|
|
// The created animation must have m_IsActive of intermediate object
|
|
Assert.That(curveBindings, Does.Contain(EditorCurveBinding.FloatCurve(
|
|
pathMappings.GetObjectIdentifier(created), typeof(GameObject), "m_IsActive")));
|
|
}
|
|
} |