mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-01-01 12:15:05 +08:00
8ed649f9a4
Closes: #907
66 lines
2.0 KiB
C#
66 lines
2.0 KiB
C#
using modular_avatar_tests;
|
|
using nadena.dev.modular_avatar.core.editor;
|
|
using NUnit.Framework;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
#if MA_VRCSDK3_AVATARS
|
|
using VRC.SDK3.Avatars.Components;
|
|
#endif
|
|
|
|
using UnityObject = UnityEngine.Object;
|
|
|
|
public class ArmatureConfusionTest : TestBase
|
|
{
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
ESOErrorWindow.Suppress = false;
|
|
}
|
|
|
|
[Test]
|
|
public void TestArmatureConfusionWorkaround()
|
|
{
|
|
ESOErrorWindow.Suppress = true;
|
|
|
|
// Arrange for a confused armature
|
|
var outer = CreateCommonPrefab("shapell.fbx");
|
|
var inner = CreateCommonPrefab("shapell.fbx");
|
|
|
|
var outerAnimator = outer.GetComponent<Animator>();
|
|
#if MA_VRCSDK3_AVATARS
|
|
outer.AddComponent<VRCAvatarDescriptor>();
|
|
#endif
|
|
|
|
inner.gameObject.name = "inner";
|
|
inner.transform.parent = outer.transform;
|
|
|
|
// Unity seems to determine which armature is the "true" armature by counting the number of bones that match
|
|
// the humanoid description, and finding the root which has the most matches. Let's confuse it a bit by removing
|
|
// some non-humanoid bones from the outer armature.
|
|
var outerTarget = outer.transform.Find("Armature/Hips/Tail");
|
|
UnityObject.DestroyImmediate(outerTarget.gameObject);
|
|
|
|
// Clear animator cache
|
|
var avatar = outerAnimator.avatar;
|
|
outerAnimator.avatar = null;
|
|
// ReSharper disable once Unity.InefficientPropertyAccess
|
|
outerAnimator.avatar = avatar;
|
|
|
|
// Verify that we're well and confused now
|
|
Assert.AreSame(
|
|
outerAnimator.GetBoneTransform(HumanBodyBones.Hips),
|
|
inner.transform.Find("Armature/Hips")
|
|
);
|
|
|
|
// Now do a setup outfit operation
|
|
Selection.activeGameObject = inner;
|
|
SetupOutfit.SetupOutfitUI(inner);
|
|
|
|
// Verify that we're not confused anymore
|
|
Assert.AreSame(
|
|
outerAnimator.GetBoneTransform(HumanBodyBones.Hips),
|
|
outer.transform.Find("Armature/Hips")
|
|
);
|
|
}
|
|
} |