2014年12月13日 星期六

[Spine] Spine匯入Unity,使Spine中的Root motion在Unity中實現

Spine進Unity,是不會像FBX一樣可以把FBX中的Root motion直接當作Unity中Game object的Root motion,因此需要額外自己寫script實現,在Spine Forum中有一篇討論串有討論到這個問題:
Applying Root Motion
Mitch 提供了一個解決方案
Had to modify SkeletonAnimation and add a callback between Update and Apply because the Time and LastTime are set to be equivalent by the time UpdateBones is called.
修改了SkeletonAnimation.cs以及SkeletonRootMotion.cs兩個檔案,實現X軸的Root motion。但是我的需求是X及Y軸都需要實現,因此對SkeletonRootMotion.cs做了一些修改,修改後的結果post在Forum中,在這邊補充一下,我不是Programmer所以Code可能不盡完善、正確...
http://esotericsoftware.com/forum/viewtopic.php?f=7&t=1364&start=26
也可以在我的GitHub上查看,檔案內直接保留了Mitch原始的code,可以直接做比對:
https://github.com/januswow/TAG/blob/master/TouchActionGame/Assets/spine-unity/Assets/spine-unity/SkeletonRootMotion.cs
主要的重點是Spine的Frames Data是以[time, x, y, ... time, x, y]的格式寫入,因此在GetXYAtTime()時,frames變數(timeline.frames)的取用需要注意:
float lastFrameX = frames[frameIndex - 2];
float lastFrameY = frames[frameIndex - 1];
另外一個題外話,由於Spine輸出的資訊完全不同於FBX,因此尚無法搭配Mecanim系統,不過nicloay有寫一個Importer,使Spine能夠在Mecanim中運作,可惜的是無法支援全部的資訊,如FFD等...
http://esotericsoftware.com/forum/viewtopic.php?f=11&t=2012

動作流程控制參考:

沒有留言:

張貼留言