iOS期末作業-半互動角色APP
APP主題 : 半互動角色製作
APP運作畫面 (實機操作):
精選APP圖三張 :
注意事項 : 編譯前必須先把 Live 2D 2.1.04_1程式庫 放到專案 "根目錄" 中
注意事項(2) : (其實是BUG) 若主畫面的tab bar “互動角色” 已經使用了,則預覽功能會變一片空白,要先跳回去關掉。
一、緣起
在Android中,有一個APP叫做 Ovoy動態桌布 ,他的功能是能讓製作好的動態角色模型檔能配合事先寫好的 Lua 程式腳本讓角色在桌面上互動,以下為我的模型檔在該APP的測試結果 : ( 娜娜奇 動態桌布 、 來自深淵 動態桌布)
想說,能否將這東西移植到iOS上,不過,很遺憾的目前根據蘋果公司的政策,在尚未越獄的iOS系統中,任何應用程式都無法取得iOS桌面的控制權 (除了iOS本身之外) ,但還是嘗試看看,總之,我還是先試試看我可不可以讀入這些模型檔。
二、相關工作 RELATED WORK
這些東西有運用到3D技術,因此需要使用一些程式庫,運作起來比較方便
由於iOS支援OpenGL因此這個構想才有可以實現的可能
但由於作業時間有限,僅有幾周的時間,無法完成完整功能,因此本人引用了一個程式庫 : Live2D
(這是一個付費程式庫,但是有提供學生授權)
但由於這個程式庫是用C++編寫的,因此Swift無法直接呼叫,要先寫 Objective-C類別專門呼叫C++函式之後才能被Swift使用。
但由於比的潘的教導,在熟知先進的Swift之後,它的前身,比它落後一節的Objective-C也能輕易看懂。
程式寫出來之後,就是準備模型檔囉,這幾個模型檔,除了藍頭髮的阿克亞之外,其餘皆由本人繪製。 (本人工作為仿作,原始版權屬於最初的畫師)
最終融合了三種語言 : Swift / Obj-C / C++ 的完美結合
三、方法 METHOD
首先是引入Live2D程式庫
接著他會確認你有沒有要商業用途
將程式庫加入專案跟目錄
裝進xCode後要進行設定
接著,就要開始讓Swift可以call C++囉
先要設定Obj-C的Bridging Header
首先我們要初始化Live2D,根據官方說明文件
我們需要用C++執行 Live2D::init();
於是在標頭檔定義可以執行這些函式的static function
並且在obj-c檔中進行實作
接下來要處理UIImage與OpenGL的連接
我當然會使用我最習慣的呼叫方法,C的呼叫方式
避免重複送入Texture依然是我的慣用方式 (C++)
但是落後的語言用多了,感覺自己也落後了,趕緊寫個Swift壓壓驚
現在能讀取材質,也能讀取模型檔了,是時候該讓Swift也能控制模型檔了
定義是Live2D模型檔資料結構的橋接
因為算是Obj-C初體驗,所以我會先用C++寫一遍,用於對照
接著,把其他會需要的C++函數都用 Obj-C 呼叫一遍,這樣就能提供Swift使用了,同時,也差不多學會obj-c了。
Swift非常聰明,當這些都定義好時就可以使用了
他會把所有的星號指標 (*) 都轉換成 optional驚嘆號( ! )
想到先前為了取得包覆的物件時用了空指標 (void*)
想了解Swift會把他當作甚麼,void!嗎 (??)
結果…
又UnSafe、又驚嘆號,感覺超危險,好像隨時會爆炸,還是不要在Swift中用好了…
接著,可以終於可以開始寫Swift了!!
Story-Board設計
角色模型準備 : 製作過程發布於巴哈姆特
比如上文中的娜娜奇,其模型檔的Texture會被拆開來存成一張圖,並利用Texture coordinate 的s、t值來指定,以減少Buffer的使用
接著就是要符合作業要求,用Swift寫了些葉面資料傳遞、新增、刪除、修改等功能
並加入了Auto Layout
順帶一提,有意點我很驚訝,Swift的程式碼中居然可以直接有圖片
覺得還滿稀奇的。
四、結果 RESULT
使用方法介紹
首先,APP主畫面用tab bar controller分成三頁,分別為起始頁、選擇頁和互動角色頁
選擇頁下方有個按鈕,可以進入編輯畫面
編輯畫面第一次開會是空白的,如下顯示,要自行新增資料
用上面右上角的 "+" 按鈕
點上方的人頭可以選擇圖片,(原本是要設定成互動角色的背景,但最後時間太趕,沒有實作)
另外一個人頭可以選擇喜歡的互動角色模型檔
旁邊有一個預覽鈕可以提供預覽
最後改好按Done就可以新增了
但要注意,沒有名稱不會通過
新增完畢
注意事項 : (其實是BUG) 若主畫面的tab bar “互動角色” 已經使用了,則預覽功能會變一片空白,要先跳回去關掉。
直接回到主畫面會發現沒有更新
把畫面往下拉就會更新了
接著選擇一個角色,即可
切換到 "互動角色"
因為有一些BUG (GL init 和解構順序問題) 所以改用按鈕觸發
可以用手勢改變大小
由於他會一直循環做出隨機動作,所以滑動時看著手指的效果稍微會抵消
另外若沒選擇角色,就會顯示預設角色,娜娜奇
當然,也可以使用其他角色
能使用的角色定義在陣列中
最後,編輯畫面除了能刪除之外
重開APP後,資料也會保留
並且有設定Auto Layout
五、專案的架設與使用
專案的Git Hub
首先要先下載Live2D
※注意:版本號為 Version 2.1.04_1
將程式庫加入專案跟目錄
然後應該就能正確編譯了
六、心得與結語
很高興能修習彼得潘的Swift程式設計課程,學了一些寫App的相關能力
同時,我選擇的期末專案也同時把Obj-C學到手啦,真是一舉兩得阿
不過我也了解到,我在使用者介面設計方面較弱,未來我我朝著改進這些缺點努力,希望下次再見面時我已經成為App工程師,成為同業朋友~~
專案連結:
※注意:編譯此專案需要Live2D 程式庫,版本 2.1.04_1
作者:
注意事項 : 編譯前必須先把 Live 2D 2.1.04_1程式庫 放到專案 “根目錄” 中
注意事項(2) : (其實是BUG) 若主畫面的tab bar “互動角色” 已經使用了,則預覽功能會變一片空白,要先跳回去關掉。