You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

49 lines
1.4 KiB

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<SkinnedMeshRenderer>();
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;
if (mesh != null && mesh.blendShapeCount > 0)
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;
}
}
}
}