UE4 Game Jam 難題排除

星期四 09 May 2019   even  
遊戲開發 展示

我將這次我開發過程中,遇到那些我以為會work卻不work的的幾個狀況特別記錄下來,有興趣的話就看看吧~

骨骼模型

建立一個會動的3D模型,需要有非常多的作業,包含: 建模 (modeling 或 sculpting + retopology)、展UV(UV unwrap)、畫貼圖(texture paint)、骨骼綁定(rigging)、骨骼權重(weight paint)、製作動畫。

骨骼與動畫必須一致,只要是同個骨骼的動畫,都可以互相套用。而不同的骨骼,只要骨骼的順序是一樣的,都可以使用UE4 裡面的animation retargeting 來讓彼此的動畫能夠互通。

在這次的Jam中,為了省略工作流程,模型用很簡單的,不畫貼圖,骨骼直接套素材包的骨骼,因此可以直接套素材包的動畫。(rigging、weigh painting是一段非常非常繁瑣的過程)

然而,這樣的工作流程很容易出錯,將UE4的模型asset輸出成.fbx,輸入到blender,在blender建造自己的模型,與素材的骨骼進行綁定,重新輸出.fbx再次輸入回UE4,這每個環節都有很多選項要點選正確,否則最後回UE4這關時就會出現missing bone的訊息,然後整組動畫都不能用。

在blender裡,一次最好只匯入一筆UE4的模型,這樣沒什麼問題,我的怪物骨骼就是以這樣的流程成功地套上,而當我試著手動建立procedule hero pack中新的身體部位時,(這個素材包將角色的身體切成很多部位,因此你只要拼裝這些部位就能建立一個新的人物),經常性的在輸回UE4時碰到這個錯誤,最後直接放棄。

因次我最後兩個路人的模型是以別種方式額外上骨骼的,mixamo提供自動rig的功能(重點是rig完就能直接用他的動畫,不然自己rig也沒啥問題)。

https://www.mixamo.com/

而我主角最後的幾個跳舞動畫也是從mixamo來的,由於骨骼不一樣,需進行animation retargeting,好再retargeting完動畫看不出什麼問題(常常會因為權重不對或是bone缺失而導致retarget完動畫完全跑掉,不能用)

最後,為何我不自己rig自己做動畫呢?主要是我還不會建立inverse kinematic(IK),當我之後熟悉這個技巧時,再來考慮自己rig、建IK、自己建立動畫~

建立一套行的通、有品質、有效率、風格一致的素材生產流程,一直是我在思索的問題。進行獨立開發只有少許的人力,而要大量使用素材包的話,當你沒有能力去修改調整素材包的內容,使其與你現有專案的風格一致時,就無法去使用那個素材包。

物件如何互相溝通

在程式碼裡面,如何讓你的擋路機關知道主角已經清除目前的怪物,要將門打開了?

像這種情況下就是使用UE4的interface或event dispatcher,例如: boss死掉了,各位該做事的做事吧,你的UI該冒出一些文字,boss旁邊的小怪要消失,通往下一關的門鎖打開了,主角的經驗值提升了...諸如此類,讓不同class的物件同時接收到訊號,做出對應到的反應。

設立interface的方式如下:

新增一個interface

將他加到你的class底下:

然後,理論上就可以使用了~

WTF!! 找不到message call!!

我多花了一個小時去爬文,我以為我忘記interface的使用方式,結果只是沒有將"context sensitive"給取消掉...

總之,為了這個小錯誤讓我多搞了一個小時,所以特別把他記起來!!

這裡就不特別進行interface和event dispatcher的教學了,這兩者基本上是UE4的程式編寫裡的基本概念,一定必須要搞懂的概念,要學的話自行google吧!網路上已有一大堆現成的教學了。

另外,我需要與關卡的藍圖(level blueprint)進行溝通,這時候無法使用interface,只能使用event dispatcher,interface要發送訊息時必須要指定發給哪個class,但你無法在藍圖裡獲得level blueprint的reference,也因此要與level blueprint溝通時似乎只能用event dispatcher。

AI行為樹的流程控制

在UE4中建立AI行為樹需要很多設置(AI controller, blackboard, task, decorator, service...),詳情請見網路上的其他教學,這是跟難啃的骨頭,我也還在努力學習中。總之,我只是要特別提醒在使用decorator來建立執行的條件檢查時,記得要在flow control這裡設置observer abort,例如: 當AI在視線範圍內偵查到目標時,馬上中斷底下的亂走邏輯,立刻切換到另一段邏輯。

2019 UE4 Spring Game Jam 開發心得
UE4 Game Jam 經驗談
UE4 Game Jam 遊戲企畫與開發日誌
UE4 Game Jam 難題排除
UE4 Game Jam 建構有車子的街道
UE4 Game Jam 敵人鎖定系統

相關文章:

>