Browse Source

Allow run-time switching between lerped animations and keyframe-only animation, and made the playback speed configurable

console
Nico de Poel 5 years ago
parent
commit
e8e04b666d
  1. 26
      Assets/Scripts/Modules/AliasModelAnimator.cs

26
Assets/Scripts/Modules/AliasModelAnimator.cs

@ -4,15 +4,22 @@ using UnityEngine;
public class AliasModelAnimator : MonoBehaviour public class AliasModelAnimator : MonoBehaviour
{ {
public AliasModel aliasModel; public AliasModel aliasModel;
[SerializeField]
private bool lerpMove = true;
[SerializeField]
[Range(1, 20)]
private float animateFps = 5f;
//private int frameNumber = 0;
private float frameNumber = 0; private float frameNumber = 0;
IEnumerator Start() IEnumerator Start()
{ {
var meshRenderer = GetComponent<SkinnedMeshRenderer>(); var meshRenderer = GetComponent<SkinnedMeshRenderer>();
if (!meshRenderer)
if (!meshRenderer || meshRenderer.sharedMesh == null || meshRenderer.sharedMesh.blendShapeCount == 0)
{ {
Debug.LogWarning($"Unexpected AliasModelAnimator on non-animated object '{name}'");
Destroy(this); Destroy(this);
yield break; yield break;
} }
@ -25,11 +32,16 @@ public class AliasModelAnimator : MonoBehaviour
meshRenderer.sharedMesh = mesh; meshRenderer.sharedMesh = mesh;
meshRenderer.SetBlendShapeWeight(0, blendWeight); meshRenderer.SetBlendShapeWeight(0, blendWeight);
//yield return new WaitForSeconds(0.1f); // Animate at 10 fps
yield return null;
//frameNumber = (frameNumber + 1) % numFrames;
frameNumber = (frameNumber + Time.deltaTime * 5) % numFrames;
if (lerpMove)
{
yield return null;
frameNumber = (frameNumber + Time.deltaTime * animateFps) % numFrames;
}
else
{
yield return new WaitForSeconds(1.0f / animateFps);
frameNumber = (frameNumber + 1) % numFrames;
}
} }
} }
} }
Loading…
Cancel
Save