Skip to content

Commit 7349730

Browse files
[Rendering] Fix sync issues with Skinned Mesh Animator;
1 parent 2b90ca0 commit 7349730

File tree

2 files changed

+14
-20
lines changed

2 files changed

+14
-20
lines changed

Engine/Core/Rendering/Animation/SkinnedMeshAnimatorSystem.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,6 @@ public void Process(Entity entity, Transform transform, IComponent relatedCompon
6868
return;
6969
}
7070

71-
if (animator.nodeRenderers.Count == 0)
72-
{
73-
animator.nodeRenderers = GatherNodes(transform, animator.mesh.meshAsset.rootNode);
74-
}
75-
7671
if(Platform.IsPlaying)
7772
{
7873
if (animator.stateMachine != null && animator.animationController == null)
@@ -90,9 +85,23 @@ public void Process(Entity entity, Transform transform, IComponent relatedCompon
9085
animator.mesh.meshAsset.animations[animator.animation],
9186
animator.mesh.meshAsset.rootNode.Clone(),
9287
animator);
88+
89+
animator.nodeRenderers = GatherNodes(transform, animator.evaluator.rootNode);
9390
}
9491

9592
animator.evaluator.Evaluate();
93+
94+
foreach (var pair in animator.nodeRenderers)
95+
{
96+
if (Matrix4x4.Decompose(pair.Value.node.transform, out var scale, out var rotation, out var translation) == false)
97+
{
98+
continue;
99+
}
100+
101+
pair.Value.transform.LocalPosition = translation;
102+
pair.Value.transform.LocalRotation = rotation;
103+
pair.Value.transform.LocalScale = scale;
104+
}
96105
}
97106
else if (animator.playInEditMode == false)
98107
{

Engine/Core/Rendering/Mesh/SkinnedMeshRenderSystem.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -109,31 +109,16 @@ public void Submit()
109109
{
110110
var bone = meshAssetMesh.bones[i][j];
111111

112-
Matrix4x4 localTransform;
113112
Matrix4x4 globalTransform;
114113

115114
if (useAnimator && MeshAsset.TryGetNode(animator.evaluator.rootNode, bone.name, out var localNode))
116115
{
117-
localTransform = localNode.transform;
118116
globalTransform = localNode.GlobalTransform;
119-
120-
if (animator.nodeRenderers.TryGetValue(bone.name, out var item) &&
121-
Matrix4x4.Decompose(localTransform, out var scale, out var rotation, out var translation))
122-
{
123-
item.transform.LocalPosition = translation;
124-
item.transform.LocalRotation = rotation;
125-
item.transform.LocalScale = scale;
126-
}
127-
else
128-
{
129-
Log.Warning($"Failed to get node renderer for {bone.name}");
130-
}
131117
}
132118
else
133119
{
134120
var node = mesh.meshAsset.GetNode(bone.name);
135121

136-
localTransform = node.transform;
137122
globalTransform = node.GlobalTransform;
138123
}
139124

0 commit comments

Comments
 (0)