2016年3月16日 星期三

跆拳道足技展示(TKD)APP(v1.0)開發心得分享

最近做了一個「跆拳道足技展示」的APP,英文名稱Taekwondo Kick Demo,簡稱TKD,現在已上架到Google Play上,iOS的部份則還在等審查中。

基本上做這個APP的目的是想要讓更多人了解跆拳道這個運動,以推廣為目的,因此是永久免費的APP,而做這類的APP也算是我個人的興趣,也希望藉由分享自己的興趣及各種成果來找到更多志同道合的朋友來一起努力追求夢想。

 


發想與起源

在大學時代我全心全力投入的事情有兩件,第一件是到處參加跆拳道比賽,和各種不同的選手比賽,追求拳來腳往的快感。第二件則是程式設計,然而程式設計是非常消耗精神和時間的,不利於經常需要參加比賽的運動選手所需要的固定作息時間,於是我當時將絕大部份的時間和心思都投入了跆拳道對練技巧的鑽研,但實際上我還是利用了寫程式的一些方法來提升自己的實力,從某個角度來說,我當時是把比賽的應對法則寫成了程式,再經由自我訓練的方式將程式強制輸入到自己的身體裡。用了這個辦法,讓我在當時得到了足以挑戰世界的實力和自信。雖然後來因為種種原因而沒有繼續比賽下去,卻又在陰錯陽差之間讓我全心投入了軟體開發的領域,累積了十幾年的各種開發經驗下來,我也算是有自信可以寫出所有自己想寫的程式,重點有明確的邏輯需求,接下來的關鍵只在於有多少資源,需要花多少時間而已。

從2012搬回台北的這幾年來,我一直想開發的是一種可以跟自己做跆拳道對練的虛擬3D應用程式,但這幾年來卻因為種種瑣事,一直無法如願。
除了生活瑣事之外,其中最大的原因是我在前二十多年以來,前十年只專注於跆拳道對練法則的鑽研,後十年則只專注於程式設計的領域,其他的事情我是完全不想管。

雖然我的心中有很多想法,但是我總覺得要表達自己的想法,應該是要先拿一個東西出來給別人看,告訴別人我能做得到,而不是只靠一張嘴講得天花亂墜,實際上卻拿不出一點本事。
當然還有一個很大的問題在於,雖然我對這件事情很有興趣,但實際上我也還沒看到相關的商機,也沒有信心可以說服金主投入資金,所以我只能默默的利用業餘的時候,試著自己做做看。

嘗試與學習

由於資金有限,我花了將近一年的時間,做了各種技術面的嘗試,利用了一些網路上現有的資源去做,其中包含了Kinnect SDK和一些Unity相關套件,但一直找不到能令我滿意的工具。
最後我發現其實我對於3D技術的了解實在太有限,於是我又花了兩年的時間去電腦補習班學習3D遊戲的製作方法,雖然我真正想做的並不是遊戲,但可以肯定的是我應該可以在學習3D遊戲製作的過程中得到許多我想要知道的方法和技術。

在學習的過程中,我才發現到3D動畫的技術比我想象的要費工,而我想了解的也不過是其中的一小部份而已。對我來說,我應該先學會3D角色的控制,但事實上在試做之後,才發現3D人形的製作也比想象中難,但製做3D模型的過程倒也有趣。

從選用工具到上手

我一開始學的是3DS Max,雖聽說現在市面上大多的遊戲都是用這個軟體做的,但他的缺點就是只支援Windows,因為這些年來我已經完全習慣在OSX上面做開發了,實在不想只為了使用這個軟體而特地開啟Windows,於是我又重頭開始學習使用Maya,用了Maya之後,我發現用Maya比較容易做出質感較好的3D人體模型,而且有MEL可以輔助設計,感覺上比較適合原本就是RD的我,於是就改用Maya來做了。

但Maya和Max主要的功能還是在於3D動畫的製作,其中雖然也有可以用程式語言去控制模型的功能,但基本上仍然只限於動畫的製做層面,如果要做出可以與用戶互動的軟體,還是要靠遊戲引擎,目前我選用的是Unity,選用的原因主要是他比較容易上手,網路上的相關技術支援也比較充足。

從練習到實做

基於尊重原創,但又缺乏美術能力,而且3D塑模技術也不成熟,拿了幾張美女的照片塑出來的都像怪物,最後決定還是先拿自己的開刀好了~因為自己的人像無論做得好壞,都不會得罪別人,也不會有仿冒或被仿冒的問題存在,實在是一舉數得的選擇。


剛開始先在3DS Max上練習做的自己的頭像

後來將在Max做的頭像轉到Maya上修改過的頭像



全身做好上完骨架,腳底做得有點扁平足

太極一場

從剛上好骨架的T-Pose,要進入足技的準備動作之前,最順勢可以做的就是稍息,立正,平行預備,接著就有一股想做型場動畫的衝動,就做了太極一場的動畫來玩玩。後來覺得這些應該可以分享給有需要的人學習用,所以就乾脆PO到YouTube上了。

前抬腳

從平行預備動作接到前抬腳預備的動作也比較簡單,於是先做了前抬腳的動畫,但實際上這個動作做起來並不順利,因為電腦算的骨架動作會亂轉,最後只好一幀幀的將動作固定好。

下壓

做完前抬腳接著做下壓也是順理成章,基本上動畫的製作順利跟實際學習的過程幾乎可以完全相同。


前踢

接下來其他的足技動作就必須從平行預備接成退右腳預備的動作,由於之前做的太極一場有做前踢的動作,只要先做好退右腳之後,就可以直接把太極一場的前踢動作拿來接到後面去改一下就能完成。


旋踢


旋踢的動作只要把前踢的動作後半加上轉腰和膝蓋,腳背壓平即可。


側踢

旋踢改成側踢也是順理成章。


後踢


只要將側踢的前半段改成從背後轉身即可變成後踢。


後旋踢

後旋踢的轉身可以拿後踢的一部份和上端旋踢來改。

基本上這些動畫都是練習的作品,有不少人覺動作太快,但我個人是覺得現階段只要掌握關鍵幀的分解動作正確,動作的節奏合理即可,由於我最後想做的是可以和自己甚至是其他人做模擬對練的應用,如果是做為訓練器材,後續如果真的要調整,還有很多地方要依據各種狀況和需求去做修改。

基本動作都做完之後,就可以把些動畫丟到遊戲引擎(Unity)來玩了,於是剛開始的時候,由於我是想做一個能跟自己對練的人偶,因此我並不想知道他每一次都會做出什麼動作,所以就把所有動作加入了隨機的亂數,基本上做到這裡已經可以拿這組東西來做很多應用了,後來靈機一閃,就拿了這個東西來做成了現在的「跆拳道足技展示」APP。

從開發到上架

從將3D模型及動畫匯入到Unity,到做出可隨機踢擊各種基本動作,且可以隨機變換左右腳這個部份,大概花不到幾個小時的時間,程式量大概也不超過200行,就想把這些資源做成現在的TKD APP應該不是什麼難事。

原本的設計就是先做一個可以依照學習動作的順序來展示動作,之後也可以按照用戶的喜好,點選自己想看的動作,而隨機踢擊的部份則可以用來做一些簡單的小測驗來提升用戶學習上的樂趣,大致上的構想就是這麼簡單。

但實際上要將這個簡單的構想做成APP則沒有想象中的順利,其中最花時間的程式其實並不是人偶的控制,而是UI(使用者界面)的設計及整個動線的控制,大概花了一個半月左右才做完,之後先拿給完全不懂跆拳道的兒子女兒玩玩看,發現了一些設計不良的地方及Bug,又做了一些補強,雖說不滿意,還有很多可以改進的地方,但基本功能目的已經達到,其實已經可以先上架後續再慢慢修改了。

由於這是我第一次將Unity的專案上架到App Store及時Google Play,在準備上架的打包及材料上也遇到了一些小問題,幸好最後都沒有花很多時間就解決了。

目前已知問題

目前比較明顯的問題是在某些設備上展示踢擊動作時,人物面孔會出現破裂的狀況:目前原因不明,因為在Maya或Unity環境下都沒有出現這個問題,也無法在開發環境中模擬出這種狀況,很難解決,有可能要重製人物模型,但也有可能重製後仍然無法解決。

但老實說我是一個內向的人,不是很喜歡抛頭露面,實在不想花太多時間和心思在這個模型上,如果可以的話,還是再放幾個帥氣美型的角色上去把那個怪老頭換下去比較實在~XD。

相關連結如下: