Saturday, July 08, 2006

HIMMG vol.02

上一回我說過,要說說在製作那個「Final Spike」實驗版本的過程中,所學到的東西。那時候的「Ngan-GINE'3D」還未成熟,有很多功能都沒有,而當時的我對3D遊戲製作亦不太熟悉,就想:不如先做個遊戲吧,那便會知道要加甚麼功能進Ngan-GINE'3D;就這樣,我便開始去想要做個怎麼樣的3D遊戲了。

Skeleton Animation in Ngan-GINE'3D在開始製作遊戲時,我不知從何入手,那我就想:不如和做2D遊戲時一樣,在控制主角上開始著手吧;就這樣,我便開始在控制角色上開始。在Ngan-GINE'3D中,我已經有Skeleton Animation了,心想那就易辦了,只要按甚麼鍵,播放Animation之餘,再移動角色便可。雖然方向是正確的,但問題出現了,Skeleton Animation的控制一塌糊塗,用MS3D export出來的Animation,是一連串的包含所有Animation,我卻沒法隨意控制播放那一段。大問題出現了,應該要怎樣解決呢?我再詳細地看看,發現一個情況,原本MS3D資料內有30格Animation,當中有15格是屬於Keyframe的,而export出來的資料卻只有15格,不是原來30格。那麼我便明白了,export出來的只有Keyframe,Keyframe之間的格數是不會被export出來的,那就好辦。我將原來的MS3D的Animation,刪去沒有Keyframe的格數,只保留Keyframe格數,那麼Animation總數和Keyframe總數一樣,只有15格。就這樣我便成功地,以Animation的Frame數值來隨意播放任何一段的Animation了。

播放Animation解決了,那便繼續嘗試做遊戲。有一天和朋友逛街,在看一些新的Console遊戲,那個朋友說:為何電腦沒有這類動作遊戲?那時候我便想:沒錯,電腦上確是沒有Console中的動作類遊戲出現,那我便決定要做個動作遊戲出來了。及後我發現另一個問題,就是:我要如何做出角色擊出左拳,敵人被左拳擊中呢?因為自己之前都做過些低水平2D遊戲,知道應該以圓對圓的碰撞測試(Sphere to Sphere collision)來調試,但首要任務,是要得知「左拳的位置」。這個就是難度,我不懂如果計算出來,我只知道可以用Skeleton中,Joint 的Position位置計算,但究竟要怎樣才得到那個位置呢?這個問題困擾了一個多星期,最後在網上搜出相關文章,再對程式調試良久,才成功得到Joint 的World position,成功做出擊出及被擊中的效果。

就這樣,Ngan-GINE'3D中的Skeleton Animation,便有了任意播放某一段Animation,及取得某個Joint 的World position功能。下一回,說說另一個話題吧,說說3D地圖及移動Object 的碰撞問題。

No comments: