溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Unity中設定 Animator分割播放

發布時間:2021-04-12 15:40:00 來源:億速云 閱讀:383 作者:Leah 欄目:開發技術

怎么在Unity中設定 Animator分割播放?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

新建一個空物體加上toggle group,

怎么在Unity中設定 Animator分割播放

下面是一堆的toggle并在Group里加上父親

怎么在Unity中設定 Animator分割播放

 private Animator myAnimator;
    public List<Toggle> myTogglesList;
    private float playTime;
    public void Awake()
    {
        myAnimator = GameObject.Find("XXX/xxx").GetComponent<Animator>();
        myTogglesList.AddRange(transform.GetComponentsInChildren<Toggle>());
    }
    public void Start()
    {
        base.Start();
        for (int i = 0; i < myTogglesList.Count; i++)
        {
            Toggle go = myTogglesList[i];
            myTogglesList[i].onValueChanged.AddListener((bool value) => OnClickBtn(go.gameObject, value));
        }
    }

怎么在Unity中設定 Animator分割播放

void Update()
    {
     //playTime  得到當前時間點
        playTime = myAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime;
        Debug.Log(playTime);
        if (myTogglesList[0].isOn && playTime > 0.1f)
        {
         //Animator.Play("ANI1", 0, 0f)  第一參數 ANI1動畫名  第二參數0,為0層, 第三參數 0f,為開始時間
            myAnimator.Play("ANI1", 0, 0f);
        }
        if (myTogglesList[1].isOn && playTime > 0.3f)
        {
            myAnimator.Play("ANI1", 0, 0.1f);
        }
        if (myTogglesList[2].isOn && playTime > 0.5f)
        {
            myAnimator.Play("ANI1", 0, 0.3f);
        }
        if (myTogglesList[3].isOn && playTime > 0.8f)
        {
            myAnimator.Play("ANI1", 0, 0.5f);
        }
  .........................
    }
    private void OnClickBtn(GameObject go, bool value)
    {
        switch (go.name)
        {
            case "btn01 (1)":
                myAnimator.Play("ANI1", 0, 0f);
                break;
            case "btn01 (2)":
                myAnimator.Play("ANI1", 0, 0.1f);
                break;
            case "btn01 (3)":
                myAnimator.Play("ANI1", 0, 0.3f);
                break;
            case "btn01 (3)":
                myAnimator.Play("ANI1", 0, 0.5f);
                break;
                .........................
        }
    }

補充: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 值作為動畫暫停條件(寫條件的時候可以設個范圍)。

關于怎么在Unity中設定 Animator分割播放問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女