Unity Animation總結

一、Animator窗口

1.動畫漸變

CrossFade是按照動畫的自身時間進行混合。如果動畫10秒,混合持續時間0.2,會在2秒後混合完成
CrossFadeInFixedTime是按照實際時間進行混合。如果動畫10秒,混合持續時間0.2,會在0.2秒後混合完成

使用CrossFade或CrossFadeInFixedTime混合時,如果混合時間大於動畫自身長度,動畫自身會被滯留在最後一幀,直到混合結束

2.四種類型變量

Int,Float,Bool,Trigger,Trigger比較特殊,它是指觸發一次,不需要去設置變量的值;

Animator的SetFloat接口可以設置阻尼,並且4種類型變量只有float是支持阻尼的。
public void SetFloat(int id, float value, float dampTime, float deltaTime);
這個接口需要每幀調用,每次調用後animator對應的param的值爲 
value = current + (target - current) * deltaTime / (dampTime + deltaTime);

3.各種狀態

簡單地說,狀態機就是角色在某種條件的的行爲。每一個狀態會有不同的顏色,每一個動畫狀態都對應一個動作。
每一個動畫狀態機最少要有“Any State”、“Entry”;

4.動畫轉換條件解釋:

Has Exit Time,是否有打斷時間 勾選後要等當前動畫播放完後,纔會接下一個狀態。不勾選的話 就允許動畫播放一半時被打斷
狀態轉換裏的Has Exit Time就是必須過度的時間,處於這個時間時,是不允許任何對動畫的操作的
Exit Time 動畫的打斷時間(從哪一幀開始逐漸降低當前動畫的權重並切換到下一動畫),在這一幀之前是不允許對動畫進行操作的;
Fixed Duration 固定持續時間(這其實是一個切換開關,切換是按照秒顯示還是按照百分比顯示)
Transition Duration 動畫切換的過度時間間隔,越小切換的越快,但是不能設置爲0,否則會失去連貫性

5.Retarget

Mecanim提供了重新設定目標的功能,如果類人模型的骨骼構造一致就可以直接使用其他模型的動畫。

6.Animator視圖

的參數需要區分大小寫,而且Unity不會自動忽略後面的空格。

7.animator的trigger變量

trigger變量只能賦值,是一種觸發變量,觸發之後會自動關閉掉,沒辦法獲取當前狀態。
比如xxxx.animator.settrigger("Attack");在執行這一句時纔是true ,但是執行後馬上自動的變爲false。適合用在單次動作或者連續不同動作使用,比如三國無雙系列的攻擊和蓄力攻擊。但是如果動畫沒有執行,只是改變了轉換條件Attack的值,那麼Attack會一直爲true直到動畫被執行;比如,如果按下攻擊按鍵後,再按攻擊鍵,它不會再播放動畫,但是Attack的值爲真。
bool跟trigger不同在於觸發之後會一直執行,而且可以獲取當前狀態。適合用在長時間持續動作,比如行走跑步。
void ResetTrigger(...);
重設該觸發參數爲False
如果是當前狀態播放結束再跳轉的話,會用到這個方法,在結束之前可以重置回False;

二、動畫壓縮

簡單的動畫壓縮主要從三個粒度來壓縮

  • 關鍵幀:減少關鍵幀的數量,這一點unity爲我們提供了一些剔除關鍵幀的接口;
  • 每一幀的屬性:從第三方插件中導出的動畫文件,可能會有一些我們不需要的屬性,如人物動畫,我們往往不需要scale曲線,這時就可以將該部分剔除掉;
  • 屬性數據精度:動畫文件的精度往往是過高的,在遊戲中,往往需要小數點後三四位即可,這一點我們可以提供設置精度的接口來達到降低動畫數據文件大小的目的;PS:這裏降低的僅僅是磁盤大小,不會降低運行內存大小;
發佈了152 篇原創文章 · 獲贊 47 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章