Open qubka opened 3 years ago
Play speed of animation does not affect root motion translation scale, to fix that I added that line offset *= instance.playSpeed; in that function
offset *= instance.playSpeed;
private void ApplyRootMotion(AnimationInstancing instance) { AnimationInfo info = instance.GetCurrentAnimationInfo(); if (info == null || !info.rootMotion) return; int preSampleFrame = (int)instance.curFrame; int nextSampleFrame = (int)(instance.curFrame + 1.0f); if (nextSampleFrame >= info.totalFrame) return; Vector3 preVelocity = info.velocity[preSampleFrame]; Vector3 nextVelocity = info.velocity[nextSampleFrame]; Vector3 velocity = Vector3.Lerp(preVelocity, nextVelocity, instance.curFrame - preSampleFrame); Vector3 angularVelocity = Vector3.Lerp(info.angularVelocity[preSampleFrame], info.angularVelocity[nextSampleFrame], instance.curFrame - preSampleFrame); { Quaternion localQuaternion = instance.worldTransform.localRotation; Quaternion delta = Quaternion.Euler(angularVelocity * Time.deltaTime); localQuaternion = localQuaternion * delta; Vector3 offset = velocity * Time.deltaTime; offset *= instance.playSpeed; offset = localQuaternion * offset; //offset.y = 0.0f; Vector3 localPosition = instance.worldTransform.localPosition; localPosition += offset; #if UNITY_5_6_OR_NEWER instance.worldTransform.SetPositionAndRotation(localPosition, localQuaternion); #else instance.worldTransform.localPosition = localPosition; instance.worldTransform.localRotation = localQuaternion; #endif } }```
Play speed of animation does not affect root motion translation scale, to fix that I added that line
offset *= instance.playSpeed;
in that function