遊戲程式設計師的角色是將設計師的願景轉化為能在我們使用的遊戲引擎中實際運行。我在Kwalee的手機遊戲程式設計團隊工作,所以對我們來說主要是Unity。例如,如果設計師希望骰子能以特定方式滾動,我將撰寫腳本以處理邏輯。我們也與遊戲藝術家合作,以確保我們的遊戲不僅看起來很棒,而且在設備上性能卓越。
在這篇博客中,我將根據我在Kwalee工作的五年經驗來分享關於成為遊戲程式設計師的重要見解和建議。我將帶您了解我們所使用的語言、工具和原則,以及我的職業建議、初學者和進階小訣竅。
遊戲程式設計師的工作是什麼?
我們撰寫程式碼,幫助遊戲成為現實。遊戲設計師創造概念,遊戲藝術家創造資產,而程式設計師則創造功能性、可玩的體驗。我們創建並優化遊戲的性能,並對識別出的問題進行故障排除。
我們確保遊戲感覺良好且運行性能優越。為達成此目標,我們必須確保程式碼本身乾淨且可擴展,這比您想像的更難。我們使用程式碼標準,以在所有團隊中保持一致的質量 - 文件可能包含命名標準、格式化等資訊。然而,有時事情不總是那麼直截了當,您可能需要偶爾跳出常規來按時完成工作。
我們的責任還包括確保遊戲在終端用戶的硬體上運行順利。例如,在我們的手機遊戲中,我們需要避免舊設備過熱,因此我們與藝術家合作以優化draw call次數。draw call是從中央處理器(CPU)到圖形處理器(GPU)呈現螢幕對象的命令 - 它告訴GPU繪製圖形元素如紋理、網格或著色器。我們需要將這些draw call的次數最小化,因為過多會導致問題,如幀率下降或卡頓。解決這些問題的方法有很多,但例如將多個對象批處理成單一draw call或減少獨特紋理和材質的數量都能有所幫助。這對手機尤其重要,因為市面上有如此多不同的設備,各有不同的技術規格。
主要的遊戲程式設計語言是什麼?
作為日常的遊戲程式設計師,我們大部分時間都在一系列程式語言中編寫腳本 - 畢竟我們是另一類型的軟體開發員。有很多語言可以選擇。有些似乎比其他更容易,但一旦您學會並掌握了一種,您一定可以學習其他的 - 主要的挑戰是邁出第一步。
以下是一些最受歡迎的遊戲程式設計語言簡介:
- C# - 一種靈活且廣受歡迎的遊戲開發程式設計語言。對於初學者來說,它是最容易掌握的語言之一。其最佳特性之一是自動垃圾回收功能,能夠為您管理記憶體分配,非常適合我們這些忙碌的程式設計師。
- C++ - 相比之下,這是一種非受控的語言,您必須手動分配和釋放記憶體,這使得其複雜性和難度更高。然而,它確實允許更高的速度、控制和性能。
- Java - 像C#一樣,Java擁有自己的記憶體管理和垃圾回收,使開發人員在處理記憶體時不會被細節困擾。它被廣泛應用於Web開發和企業應用,雖然可能(有爭議地)不是遊戲開發的首選,但在創建可擴展且高效的應用程序上仍舊是一個穩定的選擇。
- Swift - 這是Apple的本地語言,用於iOS和macOS的應用和遊戲開發。然而,這意味著其對於跨平台開發的效用較小,因為我們旨在始終將我們的手機遊戲發佈在Android和iOS上。
如何成為遊戲程式設計師?
成為遊戲程式設計師的方法有很多。我走的路相對傳統 - 我在Staffordshire大學學習了遊戲設計和程式設計。最初,我以為我會進入遊戲藝術領域 - 小時候我對藝術充滿熱情,而且我非常喜歡大學的藝術模塊,但在那裡我發現我真的很喜歡創作遊戲玩法。我可能需要好幾天時間創建一個高多邊形模型,但我可以在一半時間內讓一隻鴨子飛起來並爆炸。原型設計讓我能夠在面前快速看到結果。
然而,開發遊戲的美妙之處在於,即使你不是走傳統路線,它對大多數人來說也可以完全平易近人。我在大學裡有五十多歲的朋友 - 永遠不嫌遲去體驗新的事物。在Kwalee,我們甚至聘用過一位主要通過YouTube視頻學習,並出於娛樂製作遊戲的人。如今,新鮮和渴望的才華充滿機會。從較新學生的作品集中,我們看到他們的作品日漸豐富。我們見證了非凡的才華成長,而這正是行業中的一個令人興奮的時刻。
您可能迫不及待地想問的一個問題 - 人工智慧會影響程式設計作為職業嗎?這可能是非常有用的,且日益精進。當您需要解釋某事或在問題中困住時非常理想。您可以用它來故障排除、更改('整理')您的程式碼,只需將其貼入最新的ChatGPT即可。不過,當我們查看作品集時,我們希望看到您親自完成且自豪的工作,可以使用AI,但請盡量不要將其作為自己技能的替代品。
遊戲程式設計師的一天是怎樣的?
讓我給您舉個基於我生活的例子。我是一名首席程式設計師(我稱之為我的夢想工作),這是一種實際操作和管理其他程式設計師的精彩組合!
在我的人生中,一天的典型步驟是進行,喝杯拿鐵,然後仔細檢查QA團隊中的任何錯誤或阻礙。與團隊確認是否有人需要我解除他們的工作阻礙。然後音樂響起,任務列表開啟。我們將通過Slack分享進度影片以獲得快速反饋,並同時在2-3個專案間匆匆切換以支持我的團隊成員。我們還花費大量時間投資於共享系統以提高我們編程效率 - 這一切需要定期維護、更新和修復,以保持順利運行。
初學者遊戲程式設計小訣竅
如果您剛起步並且嚮往成為一名完全開發的程式設計師,這是我給初學者的小訣竅!
- 網上有很多內容可供學習,在YouTube上有許多示例遊戲,您沒有理由不學習!目前流行的引擎是免費的且非常有趣!
- 完全相反的極端,可能已有30年歷史,但您應該嘗試閱讀略有影響力的書《設計模式:可重用物件導向軟體的元素》,由所謂的四人幫作者們撰寫,這本書介紹了我們每天在程式設計中使用的遊戲模式的一些基礎。
- 您可能有自己的想法,但確保從簡單開始,以便您掌握基礎。
- 當您不受商業項目束縛時,您可以編寫大量程式碼,因此享受創作瘋狂事物的樂趣。
- 建立作品集非常關鍵(而這正是我得到這份工作的方式)。但請非常小心,不要只上傳同樣的老舊大學作品,因為我們將看到大量這類申請。即使多花一天時間重新設計和添加更多功能,也將幫助您脫穎而出。
- 創建自己的現實世界遊戲也是一個明智的想法 - 在Google Play上發布一個遊戲的成本非常低,所以讓發行的遊戲能在手機上展示給招聘人/出版商/家人/寵物。您還可能每年賺數千美元收入直到您獲得全職獨家工作,這是一個額外的收穫!或者這可能會激發您創建自己的完整遊戲並與出版商合作的興趣。
- 不要只學習程式設計 - 學習您將交互的其他學科,例如藝術、設計、QA等。例如,了解QA方法很值得,您可以避免陷入認定某事物有效的陷阱,而需要像用戶一樣去玩,而不是像一個寫過程式碼、有既定看法的人去期待它'應該進行的方式'。要有破壞性,嘗試人們可能做出的隨機事情,隨便按壓隨機按鈕等怪異行為。
高級程式設計小訣竅
以下是一些幫助我從初級程推薦到程式設計師,進而成為高級和主管的提示。
- 您可以從更多學習中受益,而記住沒有失敗我們就無法學習!
- 如果您對某事物真的非常有熱情 - 您可以變得更加專業化。例如,如果您喜歡與著色器和渲染流水線一起玩,學會如何使用圖形著色器來擴展能力以呈現複雜的視覺效果,並使用渲染流水線來優化性能或製作一些令人驚嘆的效果。
- 您可以開發出非常酷的東西,例如複雜系統,將其上傳到資產店中展示它,如果您的合同允許,展示您的高階工作。您可以發展成特定程式設計師類型,如遊戲規則程式設計師、伺服器程式設計師、圖形程式設計師或多人遊戲程式設計師。
- 另一條路徑則是走上管理,例如我一樣指導他人。我進一步進階職業的策略是承擔新的責任。首先,我開始改善小事情,例如小工作流程變更。那麼我通過使用模板創造新專案節省時間來使流程變得更容易。然後我嘗試指導和管理工作,這幫助我獲得更多自信,現在我參加同行評審、程碼審查、主持研討會和領導專案小組。
無論您是團隊成員或管理者,給予讚譽與建設性批評同樣重要。當審查程式碼時,讓對方感到欣賞!
遊戲程式設計的關鍵原則是什麼?
遊戲程式設計中有些關鍵話題,這些內容必須被納入博客中討論。這些是我們所關注的一些重要事物。
原碼控制/版本控制
就像遊戲中的存檔點一樣,開發專案也有存檔點。它們作為專案的一般存儲,意味著三到四名程式設計師可以同時工作在同一系統中,創建變更並推送到伺服器。我們可以追蹤這些變更,並如有任何問題出現,可以輕鬆地回滾。如果兩名開發人員在同一檔案上工作,那麼該檔案將成為合併的一部分,如果有衝突,我們可以手動解決它們或選擇應用某個人的更改。使用Unity中的Prefab或Scene時,這種情況會發生很多。
這些術語有時會重疊,但通常來說,原碼控制專注於程式碼而版本控制包括所有專案檔案、資產和文檔。
當您首次開始使用源代碼控制時,這可能起初有些可怕,可能看起來令人難以負擔,當衝突發生時您可能會發現自己不確定該怎麼做。但是,版本控制的性質幫助您保存時間點,因此,如果您經常更新並使用詳細的提交信息,那麼它非常有用且安全。您可以恢復到多個點,擁有多個分支等。將其視為開發者的安全網,這樣我們就能避免Pixar的《玩具總動員2》版本 - 意外刪除然後從其技術總監的家庭硬碟驚險找回的情況,取而代之的是一切都安全地在伺服器上。
面向對象程式設計
這是我們在Kwalee主要使用的程式設計型式。它使用對象來表示真實物件或抽象概念,並旨在使用鏡像我們看到和與現實世界對象互動的原則來組織代碼庫。它幫助通過將代碼組織成不同的類, 它可以更輕鬆地重用、縮放和維護複雜系統。
當然,是否好與否備受爭議。雖然它不是最高效,但它很有效。與語言類似,每個都有自己的優缺點,因此您應先學會一種語言 以開始並掌握語言及編譯器(人類代碼到機器代碼的翻譯器)工作原理。您也可以考慮其他類型,例如函數程式設計,將其視作數學,邏輯程式設計使用事實和規則或程序程式設計,使用逐步數據。
程式設計模式
這些是極為有用的事物——可重用的解決方案,可以幫助您解決軟體設計中面臨的常見問題。它們為您提供解決問題的範本,因此您不用每次從頭發明輪子,可以遵循已證實的解決方案。
例如,單例設計模式幫助您確保在整個遊戲中只有一個類的實例(如遊戲設置管理器),並提供全球訪問點。此模式的代碼意味著只有一個SettingsManager類實例存在,因此每次您需要它時不需要重新創建或重複它。
還有工廠模式,幫助您以更有組織和靈活的方式創建對象。您可以定義方法以根據輸入參數生成特定類型的對象(如角色或物品),允許您輕鬆創建更多類似對象而不必每次都從頭開始。
我希望這篇博客能夠讓您對遊戲程式設計感興趣,無論您是該領域的新手或經驗豐富的程式設計師!如果您是一個勤奮但有趣的人,您非常適合我們的團隊,請了解更多關於 Kwalee職業機會。除此之外,您還可以了解我們的手機遊戲或發行業務,進一步了解我們作為開發者和發行商推出的內容。








