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.
48 lines
1.3 KiB
48 lines
1.3 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;
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|