2023-11-10 14:37:56 +08:00
|
|
|
#if MA_VRCSDK3_AVATARS
|
|
|
|
|
2023-09-24 15:59:02 +08:00
|
|
|
using modular_avatar_tests;
|
|
|
|
using nadena.dev.modular_avatar.animation;
|
|
|
|
using nadena.dev.modular_avatar.core.editor;
|
|
|
|
using NUnit.Framework;
|
|
|
|
using UnityEditor;
|
|
|
|
using UnityEngine;
|
2024-07-07 12:39:42 +08:00
|
|
|
using EditorCurveBinding = UnityEditor.EditorCurveBinding;
|
2023-09-24 15:59:02 +08:00
|
|
|
|
|
|
|
public class ActiveAnimationRetargeterTests : TestBase
|
|
|
|
{
|
|
|
|
[Test]
|
2023-09-30 23:09:43 +08:00
|
|
|
public void SimpleRetarget()
|
|
|
|
{
|
2023-09-24 15:59:02 +08:00
|
|
|
var avatar = CreatePrefab("SimpleRetarget.prefab");
|
|
|
|
|
|
|
|
// initialize context
|
2023-11-10 14:37:56 +08:00
|
|
|
var buildContext = new BuildContext(avatar);
|
2023-09-30 23:09:43 +08:00
|
|
|
var pathMappings = buildContext.PluginBuildContext.ActivateExtensionContext<AnimationServicesContext>()
|
|
|
|
.PathMappings;
|
2023-09-24 15:59:02 +08:00
|
|
|
|
|
|
|
// 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")));
|
|
|
|
}
|
2023-11-10 14:37:56 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|