Unity3d 動畫系統


Unity3d學習筆記 本篇簡單介紹Unity3d中的動畫系統及其使用。

模型導入

以帶動畫的FBX文件為例,unity版本為5.0以上版本。

新版動畫系統

當你導入FBX文件后,會發現模型具有一個Animator(狀態機)組件。

outPut

我們一般將它成為(新)動畫系統,新動畫系統和舊版的動畫系統(unity3d 4.3之前版本)的區別就在於使用了Animator組件代替了原來的Animation

舊版動畫系統

同理當你使用的是舊版的動畫系統就會發現是Animation組件。

outPut

在高版本的unity3d你可以通過設置模型的Rig選項設置動畫的類型。

參數 Animation type

  • Legacy: 舊版本的動畫
  • Generic: 通用的動畫
  • Humanoid: 類人動畫

outPut

動畫導入

  • 動畫分割 Animation Clips

你可以將動畫分割成若干個獨立的動畫。

參數 Loop Time :是否循環播放。

outPut

  • 多個模型文件

你也可以使用多個模型文件導入動畫,命名約定——"模型名稱"@"動畫名稱".fbx

如: test.fbx ,test@idle.fbx ,test@move.fbx

動畫的播放和使用

Animator

你需要在項目中新建一個Animator Controller來控制動畫的播放。
然后雙擊切換到Animator視圖

你會發現有三個默認狀態

  • Entry: Animator的入口

  • Any State:任意的狀態

  • Exit: 退出狀態

我們添加兩個狀態用來表示兩個分別不同的動畫,分別名為idlemove

idleEntry狀態連接表示Animator進來執行該動畫,點擊狀態在motion選擇要執行的動畫。
一般入口狀態為idle 動畫,用來表示模型閑置的狀態。

再將idle狀態和move狀態連接,箭頭指向move,表示從閑置狀態開始運動。
將move狀態和idle狀態連接,箭頭指向idle,表示從運動狀態轉為閑置狀態。

outPut

動畫的Animator(狀態機)配置好了,我們需要添加一些參數來作為Animator在各個狀態之間切換的條件。

在左上角的Prameters中添加兩個bool變量,分別表示模型閑置和移動兩種狀態。

Prameters參數類型:

  • Float:float類型的參數,多用於控制狀態機內部的浮點型參數。

  • Int:int類型的參數,多用於控制狀態機內部的整型參數。

  • Bool:bool類型參數,多用於狀態切換。

  • Trigger:本質上也是一個bool類型的參數,但是其值默認為false,且設置為true后系統會自動將其還原為false。

設置 Idling :true Moving : false

點擊箭頭,為狀態的轉換切換條件

參數 Has Exit Time:表示在動畫播放完才會切換到下一動畫。

outPut

最后使用代碼控制動畫:


using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

	private Animator _animator;
	
	void Start()
	{
		_animator = this.GetComponent<Animator>();
	}
	
	void Update()
	{
		if( Input.GetKeyDown("q") )
		{
			_animator.SetBool ("Idling",false);
			_animator.SetBool ("Moving",true);
		}
		if( Input.GetKeyDown("w") )
		{
			_animator.SetBool ("Idling",true);
			_animator.SetBool ("Moving",false);
		}
	}
}



Animation

你可以通過 play Automatically選擇是否自動播放或是

代碼控制:


using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

		
	Animation _animation;
		
		void Start() {
			
		_animation = GetComponent<Animation>();


		}

	void Update(){
		
		if( Input.GetKeyDown("q") )
		{
			_animation.Play("Take 001");
		}
		if( Input.GetKeyDown("w") )
		{
			_animation.Play("Take 0010");
		}
	}

		
}




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM