using System.Collections; using UnityEngine; public class AliasModelAnimator : MonoBehaviour { public AliasModel aliasModel; [SerializeField] private bool lerpMove = false; [SerializeField] [Range(1, 20)] private float animateFps = 10f; [SerializeField] private float frameNumber = 0; IEnumerator Start() { var meshRenderer = GetComponent(); if (!meshRenderer || meshRenderer.sharedMesh == null || meshRenderer.sharedMesh.blendShapeCount == 0) { Debug.LogWarning($"Unexpected AliasModelAnimator on non-animated object '{name}'"); Destroy(this); yield break; } int numFrames = aliasModel.GetAnimationFrameCount(0); while (true) { aliasModel.Animate(frameNumber, out Mesh mesh, out float blendWeight); meshRenderer.sharedMesh = mesh; meshRenderer.SetBlendShapeWeight(0, blendWeight); if (lerpMove) { yield return null; frameNumber = (frameNumber + Time.deltaTime * animateFps) % numFrames; } else { yield return new WaitForSeconds(1.0f / animateFps); frameNumber = Mathf.Floor(frameNumber + 1) % numFrames; } } } }