Skip to content

Commit 74dc7a6

Browse files
sohailshafiiWkfacebook-github-bot
authored andcommitted
fix(Runtime): Deformation constraint sets up data at edit time
Summary: Deformation logic's data must be set up at edit time. This prevents it from having to set itself up before the skeleton initializes at runtime, which can be error-prone due to race conditions. This diff updates the retargeted robot and High Fi characters because they use deformation logic. Reviewed By: andkim-meta Differential Revision: D47276990 fbshipit-source-id: 7247ce79c5c56c7d48a46fd05bf99e38fd2626de
1 parent beceb70 commit 74dc7a6

File tree

8 files changed

+649
-91
lines changed

8 files changed

+649
-91
lines changed

Editor/AnimationRigging/DeformationConstraintEditor.cs

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public override void OnInspectorGUI()
1616
{
1717
var constraint = (DeformationConstraint)target;
1818
IDeformationData constraintData = constraint.data;
19+
1920
if (constraintData.ConstraintCustomSkeleton == null &&
2021
constraintData.ConstraintAnimator == null)
2122
{
@@ -24,15 +25,71 @@ public override void OnInspectorGUI()
2425
Undo.RecordObject(constraint, "Find OVR Custom Skeleton");
2526
var skeleton = constraint.GetComponentInParent<OVRCustomSkeleton>();
2627
constraint.data.AssignOVRCustomSkeleton(skeleton);
28+
EditorUtility.SetDirty(target);
2729
}
2830
if (GUILayout.Button("Find Animator"))
2931
{
3032
Undo.RecordObject(constraint, "Find Animator");
3133
var animator = constraint.GetComponentInParent<Animator>();
3234
constraint.data.AssignAnimator(animator);
35+
EditorUtility.SetDirty(target);
36+
}
37+
}
38+
if (constraintData.HipsToHeadBones == null ||
39+
constraintData.HipsToHeadBones.Length == 0)
40+
{
41+
if (GUILayout.Button("Find Hips To Head Bones"))
42+
{
43+
Undo.RecordObject(constraint, "Find Hips To Head Bones");
44+
constraint.data.SetUpHipsAndHeadBones();
45+
EditorUtility.SetDirty(target);
46+
}
47+
}
48+
if (!constraintData.LeftArmDataInitialized)
49+
{
50+
if (GUILayout.Button("Initialize Left Arm"))
51+
{
52+
Undo.RecordObject(constraint, "Initialize Left Arm");
53+
constraint.data.SetUpLeftArmData();
54+
EditorUtility.SetDirty(target);
55+
}
56+
}
57+
if (!constraintData.RightArmDataInitialized)
58+
{
59+
if (GUILayout.Button("Initialize Right Arm"))
60+
{
61+
Undo.RecordObject(constraint, "Initialize Right Arm");
62+
constraint.data.SetUpRightArmData();
63+
EditorUtility.SetDirty(target);
3364
}
34-
GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
3565
}
66+
if (constraintData.BonePairs == null ||
67+
constraintData.BonePairs.Length == 0)
68+
{
69+
if (GUILayout.Button("Initialize Bone Pairs"))
70+
{
71+
Undo.RecordObject(constraint, "Initialize Bone Pairs");
72+
constraint.data.SetUpBonePairs();
73+
EditorUtility.SetDirty(target);
74+
}
75+
}
76+
77+
if (GUILayout.Button("Initialize starting scale"))
78+
{
79+
Undo.RecordObject(constraint, "Initialize starting scale");
80+
constraint.data.InitializeStartingScale();
81+
EditorUtility.SetDirty(target);
82+
}
83+
84+
if (GUILayout.Button("Clear Transform data"))
85+
{
86+
Undo.RecordObject(constraint, "Clear Transform data");
87+
constraint.data.ClearTransformData();
88+
EditorUtility.SetDirty(target);
89+
}
90+
91+
GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
92+
3693
DrawDefaultInspector();
3794
}
3895
}

Editor/AnimationRigging/GroundingConstraintEditor.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public override void OnInspectorGUI()
4343
}
4444
}
4545

46-
4746
if (GUILayout.Button("Compute Offsets"))
4847
{
4948
Undo.RecordObject(constraint, "Compute Offsets");

0 commit comments

Comments
 (0)