哈囉!大家好,這邊是消失很久的夜川霖,不知道大家最近過得如何呢?
我最近終於從政府培訓班結訓,經過令人緊張地專題發表後獲得了一些面試機會,但一切都還是未知數,能不能順利跨領域轉行我其實心裡也沒底,只能盡力做好一切的準備。
寫到這裡時,我回頭看了看許多以前寫的文章,發現其實我心裡一直有很多話想說,也有很多事情想跟大家分享,以往我總說凡事基於許多考量不能很好地述說,但其實是自己始終無法很好地透過文字跟言語跟讀者們分享。
因此我想在這篇文章跟大家完整分享這段期間,我到底為何決心跨領域離開出版業?又是為何選擇了資工?
我目前努力想跨的產業正是遊戲業,我仍舊是個弱到爆的遊戲工程師,不斷地藉由網路資源學習更多技術與寫程式的觀念。
然而我越是去鑽研C#就越是發掘自己懂得始終不夠多,對Unity的操作也是如此,他們很迷人,我必須說從零開始製作出一款遊戲的感覺,就跟我從零開始寫出一本書的成就感相當,其中許多心態與感受也跟寫作時的自己高度重疊,因此我比預期的要容易投入遊戲製作。
其實在嘗試資工這條路之前,我也曾希望以企劃或編劇的身份投入遊戲產業,畢竟寫作是我的專長之一。
但我失敗了,而且是一敗塗地,那是發生在我從第一間出版社離職的事情,當時我剛離開第一間公司,原以為自己可以很快找到新的編輯工作,但我並沒有,投的許多間出版社都沒有任何下文,因此我開始打起歪腦筋,既然我這麼喜歡玩遊戲,又能夠寫作,為何不嘗試去遊戲產業當編劇呢?
抱持這種天真的想法,我寫了一份新履歷,開始在求職網上四處尋找遊戲編劇的職缺,想當然地,根本沒有人想要理我,我兩個產業都在投履歷,就像在亂槍打鳥,期待著有誰可以找我去面試。
終於,有一間遊戲公司回覆我了,可面試當天卻以最尷尬的氣氛被掃地出門。
這並不是面試官太苛刻,而是我自己的問題,許多應該基礎到不行的問題,我卻像是根本沒玩過遊戲的小白一樣回答不出來,我也不知道為什麼回答不出來,但後來我自己想出了答案。
我根本沒把遊戲玩進去,以為透過寫小說的方法可以解決遊戲腳本的需求,根本是大錯特錯。
那一刻我才知道所謂熱愛遊戲,並不只是「喜歡玩」這麼簡單而已,自己根本不懂遊戲,又憑什麼去設計遊戲?憑什麼寫出優秀的遊戲腳本?憑什麼可以成為優秀的遊戲編劇或企劃?
那天起,我開始踏上遊玩各種不同遊戲的旅途,但玩得遊戲越多,無法勝任企劃跟編劇的念頭卻越發明確,或許是因為我是傲慢的創作者,所以我辦不到,想到要面對整個團隊,說服他們所有人接受我的劇本,抑或著想像他們拒絕我的提案,心裡就覺得相當恐懼。
與寫小說被編輯回拒完全不同,小說創作多半屬於作者自己的自由,同時身為編輯跟作家的我比誰都清楚,作家具有某層面上任性的權利,但遊戲編劇不同,我要扛下的不只是個人名聲,而是整個團隊以及遊戲的名譽,遊戲劇本跟小說又是截然不同的形式,我要花多少時間適應?又有多少心力可以扛下壓力?團隊裡的人們又會願意花多少時間等待我?
就在此時,我收到了一間傳媒公司的面試邀約,他們正在尋找平台小說的編輯,這對我來說是救命稻草,將我拉出這種自卑深海的一線生機。
面試當天很順利,我也成功進入公司擔任編輯,我很喜歡那裡,直到現在我仍然這麼覺得,同事們都很照顧我,也很有耐心讓我不斷試錯,最重要的是,我帶著一群想像力超群的作家們努力征服業界,我以為自己會在這裡待很久,也以為自己會在這裡逐漸忘記那種自卑帶來的痛苦。
但事情發生了,其實說到底都是我的錯,許許多多的問題累積,讓我開始覺得自己不該繼續待在團隊成為累贅,更準確地說,是繼續擔任出版業的編輯。
我曾以為這是自己的錯覺,離開了團隊後,我一度還想去其他公司再次嘗試,但以前的事終究是找上了門,還記得我說第一間公司的事情嗎?其實我並不是離職,而是被資遣的,因為一系列的錯誤被驅逐,當時鬧得其實非常不愉快,這也是為何我很珍惜上一間公司的團隊,他們沒有過問當時的狀況,反而關心起我是否適應公司的生態。
然而去年8月那陣子,我面試了兩間出版社,面試階段都非常順利,其中一間的主管是超級好人,甚至願意等我跟另一家談完後再來聽我的決定,一切似乎都在朝好的方向前進。
直到某個晚餐時刻,我在同時收到了兩間的拒絕信。
同時收到是什麼概念?直到現在我其實都不清楚,也不確定真相為何,但可以肯定的是,我大概再也回不去出版業了。
至此人生的路途好像斷了,我回不去出版業,去不了遊戲產業擔任企劃跟編劇,我可以去哪裡?
不管去哪都只有無止盡恐懼,我自認為擅長的東西都被否決了,我該往何處去?
看著戶頭逐漸減少的金額,當時接近8月底,可以說是職缺最少的時刻,我想著到底哪個會先垮下?心裡?還是我的積蓄?
當晚,我聯繫了一位朋友,他前陣子報名了政府的培訓班,裡面就是在做Unity相關的培訓,我其實蠻訝異的,因為我沒想到居然有相關的課程可以學,當時的他課程才學到一半,我聽了他的分享,感覺自己大概是學不來的,畢竟大學我們科系就有選修Python課程,當時的我就學的一塌糊塗,就連曾經想學習標注語法(HTML跟CSS)都學不好,怎麼可能學得來C#?甚至是更難的C/C++呢?
到時候花了一大筆錢什麼也學不好該怎麼辦?
就在我準備關閉網頁時,我突然發現這門課程是有補助的,只要考試通過便可獲得學費減免,而這金額剛好是我現階段得以負擔的。
於是我報名了說明會,又報名了補助檢核考試,最後順利進到班級就讀,一切發生得太快,老實說我根本還沒有完全做好學習的準備,就這樣開始了C#的課程。
課程相當緊湊,所有的基本觀念都濃縮在一、兩週要全部學會,而我也開始遇到以前學程式時面臨的狀況,那就是工具這麼多,我搞不懂也記不住,他們為何在此可以這麼用?為何這兩個可以混在一起?為什麼要用這個宣告?如果不能用清單要怎麼用陣列做出功能?
看著堆積如山的作業,我感受到了窒息,看著周遭的人寫作業如此簡單,我感受到了絕望。
直到有次我去上廁所,遇到了一位上課總是打楓之谷的同學問我:「你作業寫到第幾個了?」
我聽了有點疑惑,畢竟我連一半的作業都沒完成,因此我說:「還不到一半。」
這位楓之谷同學聽了鬆了口氣說:「太好了,聽到你寫不到一半,那我就放心了。」
當下被當頭棒喝的我在小便斗前幾乎是這副模樣:
「一個上課都在玩楓之谷的傢伙跟我同樣程度?真的假的?開玩笑的吧?那我這麼努力上課是為什麼?」
我真不是個喜歡被嘲諷的人,尤其是上課都在打楓之谷的人,因此我拼了老命把所有作業交了出去,裡面有許多地方用了不好的方法,但老師並沒有因此斥責,只是鼓勵我繼續努力精進。
完成作業後,緊接其後的是Unity的作業,但我對C#的認識還是很低,就要緊急學習遊戲引擎的基礎知識,於是我做了決定,把其中一項作業:“第一人稱射擊控制器”變成一款可玩性夠高的小遊戲。
我開始用課餘時間,在家裡搜尋網路相關資料,甚至去Unity Asset Store買了相關動畫素材著手製作,看著陌生的遊戲引擎介面,以及打開來完全不知道該怎麼辦的程式碼,我陷入了沉思,該怎麼做才好?該怎麼樣才能把這遊戲做出來?我只有不到一個月的時間,光是用方塊拉一拉做一個打靶作業就已經考倒我了,何況是要做有敵人、可以切換槍的遊戲。
好高騖遠、眼高手低,這是我對自己當下產生的第一念頭,但我不服氣,至少要把槍械做的跟別人不同吧?
將買好的素材導入後,我用很難看的方式把程式碼刻了出來,途中遇到了很多阻礙,例如子彈打在Layer層為敵人的方塊上時,沒辦法傳入傷害,後來才發現我的Collider碰撞出現了問題,子彈沒有檢查到自己與敵人的Collider撞擊,於是我又用了別種方法,甚至把槍改成用RayCast檢測,但想到作業要求是寫出子彈的實體Prefab就又改了回去。
子彈改完後又遇到了新的問題,就是子彈飛出去時根本不顯眼,於是我又學著把子彈後面加上光線效果,讓槍械開火時可以看到自己的子彈軌跡。
但槍械開火時沒有火光啊!於是我找了素材讓槍械開火時可以在槍口生成火焰。
但槍械打牆壁時沒有槍洞啊!於是我找了素材把槍洞變成貼圖,每次打中牆壁時根據牆壁的法向量去生成。
但槍械沒有後座力啊!於是我在槍械的程式碼裡抓取主攝影機,讓他每次開槍時都能略微提高Y軸。
還有很多當時遇到的問題,我就不一一列出了,由於自己很喜歡玩遊戲,導致每次操作自己做的東西,都覺得有哪裡不對,越想做的完整,程式碼就變得越複雜,直到所有功能都加上後,程式碼早已變得不堪入目。
我透過那段程式碼學到了兩件事:
1. 要先把自己系統需求給規劃好,才不會變成後續想到什麼才加上什麼。
2. 雖然前進的方式根本是用爬的,但順利把功能做出來的感覺真是不錯。
眼看距離作業繳交還有時間,我便又做了把手槍,為此學會了武器管理系統,又學會了單例模式的運用,也因為想做跨場景的轉場,我學會了使用Unity提供的SceneManager,後來我做到這腦袋一抽風,覺得做都做了為何不乾脆把敵人變成會動的移動靶?但既然都要做移動靶了,為何不乾脆做會反擊的敵人?於是我學會了使用NavMesh(Unity提供的A*跟Seek插件),也學會了如何透過物件池管理敵人生成,又學會了如何使用物理引擎做出敵人被擊殺時會自然倒下的布娃娃效果(Ragdoll)。
每學會一項新的事物我都會無比興奮,此時,我回頭看了一眼自己這些日子手刻出來的糞Code。
原來我也做得到,雖然他們很醜,但我真的成功了。
(隨機遊戲截圖,整個小遊戲充斥著廉價感XDD)
做完雖然有成就感,但我知道這玩意要進業界根本不可能,換成是我光是看到畫面就不想玩了,還讓我看程式碼,可真別浪費時間。
於是專題那天,我跟同學透過轉盤決定要做ARPG時,我就知道自己必須要更突破。
所以我決定繼續挑戰角色控制器,只是這一次,我要做一個可以近、遠戰兼具的角色。
規劃好我的角色需要什麼以後,便開始著手設計程式碼,我透過抽象概念來繼承,將不同的角色狀態做切割後統一交由實例化的狀態機負責切換,但這麼做的弊端很快就出現了:效能以及控制精準度。
儘管我把玩家的輸入全部統一在某個程式碼內,但控制精度始終不如我的預期,當時我想過把控制器全部改成由列舉(Enum)跟dictionary來做控管,但架構已經完成,如今要全部大改,相當於後續的進度會被嚴重Delay,我又回到了那個死胡同,該如何確保我的狀態機彼此切換可以絲滑順暢又不突兀?
於是我想到一個解法,就是讓玩家可以Dash,只要玩家不是死亡或重傷,就可以透過Dash取消任何動作。
這方法奏效了,Dash可以取消動作這點,大幅提高了玩家的可操控性,接下來就是攝影機控制了,攝影機一共有三種型態,自由視角、越肩視角(持槍時)、鎖定視角。
這三個視角應該如何絲滑切換?老實說我不知道,於是我先給了越肩視角一個攝影機位的補正Offset,並透過簡單的bool控制讓越肩視角得以實現,然而鎖定視角怎麼做都會有問題,鎖定的當下鏡頭會有不正常晃動,解除鎖定後攝影機會秒切回鎖定前攝影機的位置。
換言之鎖定視角因為會固定跟隨玩家跟距離最近的敵人,不需要滑鼠位移的輸入控制,使得滑鼠輸入的角度始終維持在鎖定前的狀態,一但我殺死敵人或解除鎖定,攝影機回到自由狀態時就會自動切回我原本的輸入角度。
太複雜了嗎?用比較淺顯易懂的方式解釋:
現場兩位攝影師A跟B,A可以自由跟隨玩家看他的所有角度,B攝影師只能跟在角色身後,並且只有在我要他拍攝時,他才會自己去抓距離最近的敵人當作視覺中心,玩家移動到哪他就跟到哪,視線不會離開敵人。
可一但我不需要B攝影師時,原本都在休息的A攝影師還在自己的老位置,且不知道B攝影師現在視線在看哪,所以A攝影師打開鏡頭時位置會有很明顯的突兀感,就是打完敵人後突然看向無關緊要的位置,這就是我遇到的問題。
為了解決這問題,我把滑鼠輸入角度額外拉出來寫成一個函式,讓鎖定視角(B攝影師)可以取得玩家滑鼠輸入的角度,並且把自己「最後」的角度更新進去,這讓自由視角(A攝影師)可以知道鎖定視角(B攝影師)最後是看向哪裡,從而做到絲滑銜接。
接下來就是我要讓玩家有幾種攻擊方式?除了鎖定狀態下角色會自動朝敵人揮刀外,我另外新增了機制,每次攻擊前角色都會去取得攝影機的向量位置,並根據攝影機的正前方做自動轉向,讓不喜歡鎖定的玩家也能透過滑鼠操作轉向攻擊敵人。
但鎖定狀態下,我提供了玩家一招迅速拉近距離的跳斬攻擊,跳斬期間是無敵的,可以透過無敵幀躲過敵人的致命攻擊(我組員就曾用跳斬躲Boss衝撞,搞得我有點猶豫要不要修掉)。
經歷了兩個月的努力苦幹後,我們做出了遊戲。
(標題畫面)
(普通攻擊打擊,此為測試版本時截圖拍攝)
(大招可以一次打擊所有敵方單位,並產生類似空氣被劃破的視覺效果,沒錯,這很Power)
(前面那是關卡BOSS,玩家重傷時會被擊退,此為接近專題發表正式版的內容)
由於一些素材可能具有版權考量,因此我某幾張照片刻意剪掉了那些有疑慮的部分。
發表會的當天上午是領取證書的時間,收到證書後,班導師跟我們說還有五個獎品要發出去,分別給班上成績最高的五名學生,是他跟另一位資深老師共同討論後的結果。
我當時沒有多想,班上優秀的人多的是,怎麼想都不會有我的份,我只管顧好下午的發表就好,接下來還有面試,我必須專注在這上面。
所以當班導師第一個叫上台的人竟然是我時,我在台上人就像下面這張圖一樣錯愕緊張。
當時我回想起幾個月前,楓之谷老兄對我說的:「太好了,聽到你寫不到一半,那我就放心了。」
又回想起幾個月前,我看著作業題目那不知所措的樣子。
又回想起剛進來時,我聽著老師上課完全跟不上的絕望。
又回想起進來之前,那個想關閉網頁不再往下看的自己。
我知道自己很弱,在班上的程式能力也絕對排不上前十,但我也很努力,也很喜歡製作遊戲,這種心情想必很多人都擁有,我不是唯一,但此刻或許我該為自己決定跨出舒適圈感到驕傲。
如果放棄了,我就不會知道自己土炮地敲敲打打也能做出會動的程式。
這幾天在準備面試,我仍舊會打開電腦,把新找到的素材導入Unity後嘗試製作不同的遊戲內容,希望可以在未來累積自己的作品集,畢竟每種遊戲對系統的需求都有所不同,優化的方法卻極其相似,學習新知的同時還能精進能力,我覺得非常有意思。
但在寫程式的同時,我也會打開自己的小說來寫,或許是因為脫離了恐懼,寫小說的感覺都變得有所不同。
以上便是這段期間發生的事情,感謝看到這裡的讀者,小說新作沒意外會在今年完成,接下來就是會投稿,看這部作品可以走到多遠的距離,到時候會在巴哈姆特或粉專更新最新消息,感謝各位!
---------------------------------
後記
這是我現在的每一天: