UE4: Spine2D 導入與基本使用

Spine2D, 用來做 2D 動作的軟體工具,這陣子好像漸漸使用的人越來越多了,我自己最近在玩空洞騎士( Hollow Knight ) 也是 2D 紙片遊戲,整體畫風真的很讚,動作方面也很細膩流暢,但他是用什麼做的,我不知道...XD。好吧,其實就像我主管常說的,工具只是工具,重要的還是觀念,不過好的工具的確會帶你上天堂,畢竟人家都處理好了。
** 以下單純自己初學 UE4 使用到的紀錄

* 要在 UE4 專案使用 Spine2D 有以下幾件事情要處理:

        1. 將 Spine2D 的 Plugin 放到專案中
        2. 導入 Spine2D 資料於專案內
        3. Spine2D 動設定與切換 ( Play Mode )
        4. Spine2D 效能優化 -- 初步測試

* 1. 將 Spine2D Plugin 放到專案內

          -- 1.1 開啟一個專案( Blueprint or C++ 皆可),我這邊使用的是 UE4 4.22

          -- 1.2 下載 Spine2D 的 Plugin,放到專案資料夾內,重新開啟專案
                      -- 下載官方 plugin from github
                      -- 放置方式請參考官網說明,installation 下 5,6,7


* 2. 導入 Spine2D 資料於專案內 -- 官網說明


          -- 2.1 Spine2D 輸出的檔案有 .atlas, .json, .skel,.紀錄貼圖與骨架動作的資訊

                      -- 這些資料在 1.2 下載的資料夾內有一個 examples 資料夾下有,也可從官方自己下載




          -- 2.2 將 .atlas 與 .json/.skel (擇一) 匯入專案內,UE4 會將資料轉存成 .uasset 資料,點擊資料可開啟資料介面


          -- 2.3 建立一個空場景,放置一個空的 Actor,對其 Add Component

                   -- SpineSkeletonRenderer Component
                   -- SpineSkeletonAnimation Component
          -- 2.4 在 SpineSkeletonAnimation Component 上,將 Atlas, Skeleton Data 設定好,Preview Skin 打上動作名稱就可
                   以初步預覽了 ( Play Mode 下無效 )

* 3. Spine2D 動作設定與切換 ( Play Mode )

          -- 3.1 建立一個 Blueprint,繼承 Actor,命名隨你 ( 符合命名規則,不是中文都好...XD

          -- 3.2 點擊兩下開啟編輯視窗,一樣對其 Add Component,加上 SpineSkeletonRenderer ,
                   SpineSkeletonAnimation ,並將 Atlas, Skeleton Data 設定好

          -- 3.3 設定初始動作與取得 Play Controller ,接收 Input 做動作切換的設定


          ** 另外使用了 Animation Complete ( SpineSkeletonAnimation) 去偵測動作結束沒,結束回 idle

* 4. Spine2D 效能優化


          根據原作者的回答,Spine2D 全仰賴 CPU 端運算與繪製,一個空景 PC 跑 FPS 大概在 120,大概超過 40 隻 
Spineboy 就會有感下降,100 隻大概 50-90 間,不管攝影機照不照的到。( 這樣看電腦配備以及電腦現行運行 什麼而定了)
不過可以很確定的是,CPU 運算會比純3D來的吃重就是了,如下圖,每個 frame 都會不斷呼叫  SpineSkeletonRenderer 與 SpineSkeletonAnimation,攝影機看不到也是。



          -- 4.1 可以建立一個 C++ Class 繼承 Actor ,寫函式來開啟 / 關閉 Component 的 Tick

      -- 4.2 使用這個 Actor 去做一個 BP 出來,然後一樣開啟 BP 去增加 Spine Component,然後指定 Atlas, Skeleton 
               Data,接著串動作,這邊另外使用 到 Was Recently Rendered 來判斷是否在攝影機內,不在攝影機內就停止  
               tick 呼叫


     **打開 FPS 放個 100 隻,就會有感了。

------------------------------------------------------------------------------------------------------------------------------------------------------
     老實說,這樣的優化並不準確,只是針對 Profiling 去把問題解決,不過就先求有再求好吧,順便目標導向的摸摸 UE4有哪些功能,感覺上面寫的也是冰山一小角而已,剛寫的時候有想說都用 BP 去串看看,不要寫 Code 去關 Tick,摸一下就放棄了.....XD 決定還是先把當前的紀錄下來就好,提供這個專案的 Github,有興趣的可以下載來看看。


留言

這個網誌中的熱門文章