Unity2D教程:人物移動動畫,動畫狀態機之間的轉化,動畫卡頓問題

  • 2D像素人物可以通過擡左腳和擡右腳以及原畫三種照片完成動畫效果

  • 把這三種圖片水平翻轉後,你就得到了所有需要的素材
    在這裏插入圖片描述

  • 最簡單的正常動畫邏輯需要4個動畫,左idle,右idle,左walk和右walk。

  • idle直接讓4張相同的原畫就行
    在這裏插入圖片描述

  • walk則是左腳右腳左腳右腳左腳右腳,重複是爲了看起來流暢點(1秒6個關鍵幀)
    在這裏插入圖片描述

  • 狀態機的轉換需要想一下

  • 我們設置了2個參數,speed和lookLeft,表示速度和朝向。

    • idle到walk:檢測到speed>0.5觸發,根據朝向判斷哪個walk
    • 爲了判斷條件簡單點,walk只設置到不同方向的walk和同向的idle,不設置不同方向的idle。
    • 同理左idle也不需要到右idle。

在這裏插入圖片描述

  • 此時邏輯正確了,但是你會發現轉化很卡頓,因爲需要把兩個狀態機之間的transition時間設置爲0,以及has exit time去掉。
    在這裏插入圖片描述
  • 通過腳本設置朝向和速度(通過移動向量的長度設置)
void Update()
{
    // 移動相關
    float moveX = Input.GetAxisRaw("Horizontal");
    float moveY = Input.GetAxisRaw("Vertical");
    Vector2 moveDirection = new Vector2(moveX, moveY);
    Vector2 p = body.position;
    p += moveDirection * speed * Time.deltaTime;
    body.MovePosition(p);

    // 動畫
    if (moveDirection.x != 0)
    {
        if (moveDirection.x == 1) lookLeft = false;
        else lookLeft = true;
    }
    anim.SetBool("lookLeft", lookLeft);
    anim.SetFloat("speed", moveDirection.magnitude);// 向量長度
    
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章