2013年6月5日 星期三

[Unity] Mecanim Animator .controller 文件結構紀錄

此文章紀錄Mecanim Animator Controller檔案的內容結構,當角色數量龐大時,眾多的Animator Controller會造成極大的管理上的困擾,因此若能直接解析內部的訊息的話,即可利用Script做外部的直接修改,做出更方便的管理工具。

而在初次看過其內容後,獲得了一個重點即是,各地方的命名十分重要,Controller內部的目標來源都是以fileID的形式運作,但同時有些東西也可以在Unity中做命名,雖然會需要多一個命名規則的訂制與管理的工,但是直接利用Name做修改會比用fileID方便許多,譬如說Transition的命名。

參考文件
在開始看文件內容之前,先說明fileID的運作方式,fileID實際上是由兩組數字組成,首先是該物件的Class ID Number,然後是一組五位數物件在所在檔案內的序號(偶數),舉個例子,現在有一個帶有3個Animation Clip的FBX檔案,則這3個Clip的fileID就是:( 7400000, 7400001, 7400002 ),74為Animation Clip的ID Number。

以下開始文件內容:
在每個區段(term,代表一個object)的一開始,都會先有一串的數據資訊
  • --- !u!91 &9100000
    !u!後代表的是物件類型
    &(ampersand)後的數字是該區段資訊獨有的fileID
AnimatorController此部份包含了Animator的基本屬性,如:
  • m_Name
    Animator的名稱
  • m_AnimatorEvents
    Flags
  • m_Layers
    Layers
在來是各個Transition的參數(State與State間的Transition),
  • m_Name
    Transition的命名,預設狀況下是無命名的。
    如果想要手動修改.controller文件的話,對所有的Transition做命名會方便非常多,可快速的知道各個Transition資訊的位置。
  • m_SrcState / m_DstState
    來源跟目的State,填入的資訊為fileID。
  • m_TransitionDuration
    Transition的時間長度,應該是以SrcState的Motion的時間長度為基準的趴數。
    例如來源動作的長度為2秒,而m_TransitionDuration的值為0.5時就是使用1杪做過渡。
  • m_TransitionOffset
    DstState相對於TransitionDuration起始點的offset。
    當DstState的起始點與TransitionDuration的起始點相同時,則m_TransitionOffset的值為0。
    當DstState的結束點與TransitionDuration的起始點相同時,則m_TransitionOffset的值為1。
  • m_Conditions
    進行Transition的條件,以下的參數皆為Condition的條件式
    • m_ConditionMode
      條件判斷的模式
      • 1,Bool的True
      • 2,Bool的False
      • 3,Float/Int的Greater
      • 4,Float/Int的Less
      • 5,ExitTime
      • 6,Int的Equals
      • 7,Int的NotEqual
    •  m_ConditionEvent
      要參照的Flag,m_ConditionMode為ExitTime時此欄位為空
    • m_EventTreshold
      條件式的參考值,Bool時不管是True或False值都填0
    • m_ExitTime
      ExitTime的float值
再來是State的資訊

最後是StateMachine的資訊


沒有留言:

張貼留言