Unity手动控制动画播放

一般情况下animator只要一运行,就会自动播放当前的clip,有时候我们想通过代码来控制,比如,用户按住按扭,就正向播放,按住另一个就反向播放。

虽然通过speed也可以做到,但终究有点麻烦,好了,话不多说,上代码

using UnityEngine;
using System.Collections;
//[ExecuteInEditMode]
//此动画1.7秒
public class Test_AnimSeek : MonoBehaviour {

    Animator animator;
    const float kDuration = 1.7f;
    bool init = false;
	// Use this for initialization
	IEnumerator Start () {
        init = true;
        Debug.Log("start");
	    animator = GetComponent<Animator>();
        const float frameRate = 30f;
        const int frameCount = (int)((kDuration * frameRate) + 2);
        animator.Rebind();
        animator.StopPlayback();
        animator.recorderStartTime = 0;

        // 开始记录指定的帧数
        animator.StartRecording(frameCount);

        for (var i = 0; i < frameCount - 1; i++) {
            // 记录每一帧
            animator.Update(1.0f / frameRate);
        }
        animator.speed = 0;
        yield return new WaitForEndOfFrame();
        animator.speed = 1;
        // 完成记录
        animator.StopRecording();
        Debug.LogFormat("{0},{1}",animator.recorderStartTime,animator.recorderStopTime);

        // 开启回放模式
        animator.StartPlayback();
	}
    float m_CurTime = 0f;
    void Update() {
        if ( !init) {
            Start();
        }
        int i = 0;
        if (Input.GetKey(KeyCode.LeftArrow)) {
            i = -1;
        }
        if (Input.GetKey(KeyCode.RightArrow)) {
            i = 1;
        }
        //Debug.Log(m_CurTime);
        animator.playbackTime = m_CurTime;
        animator.Update(0);
        m_CurTime+=(1/70f)*i;
        if (m_CurTime>1.7f) {
            m_CurTime = 0;
        }
        if (m_CurTime < 0) {
            m_CurTime = 1.7f;
        }
    }
}


大家可以注意到,运行时章鱼是没有动的,后面它动了起来是我在按<-和->键来控制的,脚本中的kDuration填写动画的时长,然后把代码挂在模型上就可以看到 效果了

  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值