Unity animator不剪輯動畫實現 分段播放動畫

    public Animator anim;
    private AnimatorStateInfo animInfo;   


    /// <summary>
    /// 控制動畫暫停和播放
    /// </summary>
    int playSpeed = 0;
    void Update()
    {

        animInfo = anim.GetCurrentAnimatorStateInfo(0);
        //判斷正在播放Take 001動畫
        if (animInfo.normalizedTime < 0.99f && animInfo.IsName("Take 001"))
        {
            //第一段動畫
            if (animInfo.normalizedTime > 0.19 && animInfo.normalizedTime < 0.2)
            {
                //達到條件時暫停播放動畫
                print("暫停播放1");
                anim.speed = playSpeed;

            }
            //第二段動畫
            else if (animInfo.normalizedTime > 0.39 && animInfo.normalizedTime < 0.4)
            {
                print("暫停播放2");
                anim.speed = playSpeed;
            }
            else
            {
                //自動設置回停止播放條件
                playSpeed = 0;
            }

        }
     }

    /// <summary>
    /// 開始播放動畫
    /// </summary>
    private void PlayAnim()
    {
        //設置播放動畫條件
        playSpeed = 1;
    }

animInfo.normalizedTime  動畫狀態標準化時間,一段動畫值爲從0~1。到1則動畫播放完畢

animInfo.IsName("Take 001")  當前播放的動畫,Take 001是動畫名稱

原理:首先要知道每段動畫結束幀,然後該段動畫結束幀除於總幀得到該結束幀在animInfo.normalizedTime 的值,最後作爲條件暫停動畫,繼續播放動畫可實現下一段動畫的啓停。

比如:有一個動畫100幀,不剪輯,需要播放多段動畫。

得知第一段的結束幀在20幀,那麼20/100=0.2,0.2則爲normalizedTime 值作爲動畫暫停條件(寫條件的時候可以設個範圍)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章