Unity 2D角色動畫狀態切換
一,Idle狀態
1,選中角色,開啟Animation動畫面板;
2,新建一個動畫面板Idle;
3,拖動相關角色狀態圖片,實現動畫
二,run狀態
1,新建一個動畫面板run;
2,拖動相關角色狀態圖片,實現動畫
三,jump狀態
1,新建一個動畫面板jump;
2,拖動相關角色狀態圖片,實現動畫
四,開啟角色物件的動畫編輯器面板Animator;
1,設定預設動作為idle;
2,設定idle過渡到run的過渡線 ,設定run過渡到idle的過渡線;
勾掉Has exit Time選項;
Transtion Duration(s),設定為0;
3,設定idle過渡到ump的過渡線 ,設定ump過渡到idle的過渡線;
勾掉Has exit Time選項;
Transtion Duration(s),設定為0;
4,設定run過渡到ump的過渡線 ;
勾掉Has exit Time選項;
Transtion Duration(s),設定為0;
五,設定動畫過渡引數
1,設定一個float-----speed;
2,設定一個bool-----brouned;
3,idle過渡到run的過渡線,Condition選擇speed-----Greater-----0.1;
4,run過渡到idle的過渡線,Condition選擇speed-----Less-----0.1;
5,idle過渡到jump的過渡線,Condition選擇Grouned-----false;
6,jump過渡到idle的過渡線,Condition選擇Grouned-----true;
7,run過渡到jump的過渡線,Condition選擇Grouned-----false;
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { privateRigidbody2D m_rg; public float MoveSpeed; public float JumpSpeed; //在角色下新增一個空物體 //設定一個跳躍監測點 public Transform CheckPoint; //設定一個跳躍監測半徑 public float CheckRadius; //設定一個跳躍監測層---角色與地面的檢測 public LayerMask WhatIsGround; //角色預設是否著地--true public bool isGround; private Animator Anim; void Start () { m_rg = gameObject.GetComponent<Rigidbody2D>(); Anim = gameObject.GetComponent<Animator>(); } // Update is called once per frame void Update () { // isGround = Physics2D.OverlapCircle(CheckPoint.position, CheckRadius, WhatIsGround); //------------------Input.GetAxisRaw沒有小數值,只有整數,不會產生緩動------------------ //角色水平移動 //按住D鍵,判斷如果大於0,則向右開始移動 if (Input.GetAxisRaw("Horizontal") > 0) { m_rg.velocity = new Vector2(MoveSpeed, m_rg.velocity.y); //設定自身縮放的值 transform.localScale = new Vector2(1f,1f); } //角色水平移動 //按住A鍵,判斷如果小於0,則向左開始移動 else if (Input.GetAxisRaw("Horizontal") < 0) { m_rg.velocity = new Vector2(-MoveSpeed, m_rg.velocity.y); //如果new Vector2(-1f, 1f) x值為負數,則圖片進行反轉顯示 transform.localScale = new Vector2(-1f, 1f); } else //角色水平移動 //鬆開按鍵,判斷如果等於0,則停止移動 { m_rg.velocity = new Vector2(0, m_rg.velocity.y); } //角色按下空格鍵實現跳躍 //禁止二連跳 //要先判斷角色是否在地面上,在地面上可以跳,不在地面上則不能跳 if (Input.GetButtonDown("Jump")&& isGround) { m_rg.velocity = new Vector2(m_rg.velocity.x,JumpSpeed); } Anim.SetFloat("Speed", m_rg.velocity.x); Anim.SetBool("Grouned", isGround); } }