From e8e04b666d5b3ca70ff94746fb1bd16838e9a8e7 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Fri, 23 Apr 2021 01:05:17 +0200 Subject: [PATCH] Allow run-time switching between lerped animations and keyframe-only animation, and made the playback speed configurable --- Assets/Scripts/Modules/AliasModelAnimator.cs | 26 ++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/Assets/Scripts/Modules/AliasModelAnimator.cs b/Assets/Scripts/Modules/AliasModelAnimator.cs index aad728b..66efa66 100644 --- a/Assets/Scripts/Modules/AliasModelAnimator.cs +++ b/Assets/Scripts/Modules/AliasModelAnimator.cs @@ -4,15 +4,22 @@ using UnityEngine; public class AliasModelAnimator : MonoBehaviour { public AliasModel aliasModel; + + [SerializeField] + private bool lerpMove = true; + + [SerializeField] + [Range(1, 20)] + private float animateFps = 5f; - //private int frameNumber = 0; private float frameNumber = 0; IEnumerator Start() { var meshRenderer = GetComponent(); - if (!meshRenderer) + if (!meshRenderer || meshRenderer.sharedMesh == null || meshRenderer.sharedMesh.blendShapeCount == 0) { + Debug.LogWarning($"Unexpected AliasModelAnimator on non-animated object '{name}'"); Destroy(this); yield break; } @@ -25,11 +32,16 @@ public class AliasModelAnimator : MonoBehaviour meshRenderer.sharedMesh = mesh; 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; + } } } }