Unity Game CI

更新於 2023/06/03閱讀時間約 4 分鐘

前情提要

這次要講的是如何在Unity 專案裡 ,使用 Game CI 提供的 Github Action 將建置專案自動化,細節微操很多,一不小心篇幅就拉得有點長。
但我還是把它放在 10 minutes Unity 專欄裡......

湯姆就是瑪莉

記得做大學專題時,每次輸出一版時間就耗在那裡,專案小還好說,大專案每次Build 半小時就過去了。
我們並不需要非常高效能的電腦去處理輸出,並且希望它能定期完成輸出動作給美術或企劃確認,這個時候 CI(Continuous Integration) 技術就相當重要。
因為是在 Github 上操作,請務必先學會版控技巧!

甚麼是CI / CD

工程師們通常都有一個共通點,就是講求效率,希望一些重複性的操作能夠自動化進行,於是便有了CI/CD 的誕生。
舉個例子,在我大學畢製遊戲時,並不是所有專案成員都熟悉Unity 的操作,但又需要確認目前進度或是錄製提報需要的影片,這時候就會來拜託身為主程式的我建置一版出來。
但非常可惜,那時候的我並沒有掌握這個技術
把繁瑣的建置流程託管給Game CI

設定Github Workflows

在專案根目錄裡新增路徑 .github\workflows ,並新增三個檔案:
HelloWorld.yaml Activation.yamlBuild.yaml
這時候你的資料夾結構會長這樣:
Project 
├─ .github
│ └─ workflows
│   ├─ Activation.yaml
 │     ├─ Build.yaml
│   └─ HelloWorld.yaml
├─ Assets
│ ├─ Scenes
.
.
.
YAML 是一種可讀性高的資料序列化格式
我們先用 HelloWorld.yaml 來簡單練習 Github Workflow 的格式。用腳本編輯器打開它並輸入以下內容:
完成之後將變更 Push 上去。
回到 Github 上點選 Actions ,應該會看到我們的My workflow ,點選 Run workflow 來試試看:
靜待一段時間後,My workflow 完成了,我們來看一下結果:
run: echo Hello 執行成功
這樣你已經完成第一個 Workflow 了,我們可以進入 Game-CI 實戰了!

授權Unity

我們需要授權 Game-CI 容器上的 Unity。
打開 Activation.yaml 並寫入:
這個 Workflow 可以讓我們取得手動授權的 .alf 檔案。同樣到 Github 執行我們的 Acquire activation file
執行成功後,Summary 滑到底,將 Artifacts 裡的授權檔下載:
Unity手動授權 網站上將我們的 .alf 檔上傳,選擇免費方案後下載授權成功的 .ulf 檔。
注意:如果是專業版的用戶,走的是另一個流程!
回到 Github ,因為授權碼不能隨便洩漏,我們需要設定 Github Secrets:
需要新增三組 Secret ,分別是 UNITY_EMAIL UNITY_PASSWORD UNITY_LICENSE
UNITY_EMAIL - 註冊Unity ID 使用的信箱
UNITY_PASSWORD - Unity ID 帳戶密碼
UNITY_LICENSE - .ulf 檔裡的所有內容
新增完畢後就剩最後一步了,設定 Builder!

Game-CI Builder

打開 Build.yaml 並寫入以下內容:
Push 完後同樣回到 Github Actions ,選擇執行 Build 🥖😭🌭 ,靜待建置完成:
建置完成了
注意:Github Artifacts 是有容量上限的,免費版是 500MB
   這個範例裡有設定 retention-days:2 讓 artifact 兩天清理一次

完全自動化

雖然已經不用在自己的電腦上 Build ,但總不可能每次需要才到 Github Action 上操作,違反了我們 CI 的初衷,所以我們可以這樣改寫 Build.yaml
這邊使用到了 POSIX Cron 表達式,上面的範例指的是 每周一三五 (UTC)4:00
台灣是 UTC+8 ,所以是 中午 12 點
如此一來,真正的自動化建置就完成了~

總結

這次介紹了用 Game-CI 來建置,還有很多可以延伸細講的東西,包括如何將自己閒置的電腦當成 Runner 來跑建置、如何將結果輸出到 Discord 上等。最近也有在看同樣是 CI/CD 工具的 Jenkins ,等到學成歸來再看看能不能寫一篇。
avatar-img
6會員
10內容數
只要10分鐘!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
#Jaku的沙龍 的其他內容
UnityEvent 簡單介紹。
UnityEvent 簡單介紹。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
Unity (美股代號:U)是一家以渲染實時3D為核心業務的公司。上次評價是 2023Q1財報,已經過了9-10個月,這次回頭來檢視2023Q4和全年的結果。簡單講結論的話就是:美好開年,掙扎結尾。公司大刀闊斧準備再度出發,但是否有效果還需要再觀察一陣子。
Thumbnail
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
這篇文章將會介紹第三人稱遊戲設計中,關於角色的建模與動畫的設計與製作。
Thumbnail
本文章將介紹回傳及無類型回傳在變數與函數中的用法,以及他們比較常使用的方式。
Thumbnail
本文章將介紹Unity產品生命週期的一部分,並提供使用範例程式碼。
Thumbnail
在Unity中,Gizmos是製作輔助線的函式,用於繪製物理設線視覺化、協助重疊物件點擊、紀錄物件移動路徑等等,用途將相當廣泛,算是非必要的輔助程式,用於輔助遊戲製作。
Thumbnail
這篇文章主要介紹父子關係,以及相關的程式控制代碼列舉。
Thumbnail
這篇文章會帶你了解Unity中Inspector最基本項目中的Tag&Layer,以及Tag相關應用。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
Unity (美股代號:U)是一家以渲染實時3D為核心業務的公司。上次評價是 2023Q1財報,已經過了9-10個月,這次回頭來檢視2023Q4和全年的結果。簡單講結論的話就是:美好開年,掙扎結尾。公司大刀闊斧準備再度出發,但是否有效果還需要再觀察一陣子。
Thumbnail
這篇文章將會講述虛擬(virtual)與覆蓋(override)的簡易使用方式。
Thumbnail
這篇文章將會介紹第三人稱遊戲設計中,關於角色的建模與動畫的設計與製作。
Thumbnail
本文章將介紹回傳及無類型回傳在變數與函數中的用法,以及他們比較常使用的方式。
Thumbnail
本文章將介紹Unity產品生命週期的一部分,並提供使用範例程式碼。
Thumbnail
在Unity中,Gizmos是製作輔助線的函式,用於繪製物理設線視覺化、協助重疊物件點擊、紀錄物件移動路徑等等,用途將相當廣泛,算是非必要的輔助程式,用於輔助遊戲製作。
Thumbnail
這篇文章主要介紹父子關係,以及相關的程式控制代碼列舉。
Thumbnail
這篇文章會帶你了解Unity中Inspector最基本項目中的Tag&Layer,以及Tag相關應用。