1. 程式人生 > >Unity 2D角色動畫狀態切換

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 {

    private
Rigidbody2D 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); } }