iOS期末作業-半互動角色APP

張宇帆
海大 SwiftUI iOS / Flutter App 程式設計
12 min readJan 17, 2018
本人嘗試繪製的互動角色模型檔

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++ 的完美結合

Swift / Obj-C / C++ 的完美結合

三、方法 METHOD

首先是引入Live2D程式庫

接著他會確認你有沒有要商業用途

所屬機構 : 國立臺灣海洋大學

將程式庫加入專案跟目錄

裝進xCode後要進行設定

除了這個之外,還要設定include目錄

接著,就要開始讓Swift可以call C++囉

先要設定Obj-C的Bridging Header

首先我們要初始化Live2D,根據官方說明文件

我們需要用C++執行 Live2D::init();

於是在標頭檔定義可以執行這些函式的static function

並且在obj-c檔中進行實作

一開始不習慣obj-C語法,因此會把C++語法寫一遍

接下來要處理UIImage與OpenGL的連接

我當然會使用我最習慣的呼叫方法,C的呼叫方式

避免重複送入Texture依然是我的慣用方式 (C++)

但是落後的語言用多了,感覺自己也落後了,趕緊寫個Swift壓壓驚

用來透過Obj-C呼叫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) 若主畫面的tab bar “互動角色” 已經使用了,則預覽功能會變一片空白,要先跳回去關掉。

直接回到主畫面會發現沒有更新

把畫面往下拉就會更新了

接著選擇一個角色,即可

切換到 "互動角色"

因為有一些BUG (GL init 和解構順序問題) 所以改用按鈕觸發

可以用手勢改變大小

由於他會一直循環做出隨機動作,所以滑動時看著手指的效果稍微會抵消

另外若沒選擇角色,就會顯示預設角色,娜娜奇

當然,也可以使用其他角色

能使用的角色定義在陣列中

最後,編輯畫面除了能刪除之外

重開APP後,資料也會保留

並且有設定Auto Layout

六、心得與結語

很高興能修習彼得潘的Swift程式設計課程,學了一些寫App的相關能力

同時,我選擇的期末專案也同時把Obj-C學到手啦,真是一舉兩得阿

不過我也了解到,我在使用者介面設計方面較弱,未來我我朝著改進這些缺點努力,希望下次再見面時我已經成為App工程師,成為同業朋友~~

專案連結:

※注意:編譯此專案需要Live2D 程式庫,版本 2.1.04_1

作者:

注意事項 : 編譯前必須先把 Live 2D 2.1.04_1程式庫 放到專案 “根目錄” 中

注意事項(2) : (其實是BUG) 若主畫面的tab bar “互動角色” 已經使用了,則預覽功能會變一片空白,要先跳回去關掉。

--

--