分享/丁成甲 整理/依光流
11月18日晚,在Unity線上技術大會遊戲專場,《帕斯卡契約》的總導演兼美術總監丁成甲分享了他們的製作流程和思路。這款遊戲是少有的單機手遊,而且在前不久,它的銷量超過了100萬,實屬難得。
《帕斯卡契約》身上有諸多的特殊性,它在手機平臺做出了主機遊戲的觀感,甚至因此登上了蘋果發布會,成為經典案例。但實際上它並沒有硬堆品質,而是採用了很多取巧的方式,規避了過度的資源消耗。
從最開始,其研發團隊Tipsworks只有10個人,到現在也維持在30人左右。這次分享最有意思的地方莫過於:在團隊人手有限的情況下,如何發揮自己的長板規避短板,找準製作的思路,從而在移動端實現一個足夠亮眼的效果。
以下為丁成甲的分享,遊戲葡萄整理:
大家好,我是《帕斯卡契約》的總導演兼美術總監,負責項目裡的劇情框架、遊戲玩法還有美術表現。本期我會以遊戲製作的角度來介紹一下《帕斯卡契約》的創作流程,展示一下在創作《帕斯卡契約》中,我們經歷了哪些階段?最後我會舉一些遊戲中的例子來解析一下美術表現與優化。
首先介紹一下我們的項目,《帕斯卡契約》是使用unity來製作的一款動作角色扮演項目,最開始我們用的是unity的5.6版本,後來到研發的最後一年我們升級到unity 2018。我們從2016年開始研發,大概消耗了三年的研發周期,製作人員在第一年大概有10個人,一點一點擴大,到最後一年我們大概有30個人,整個項目95%的資源都是自己產出的。
這就是我們公司的一面牆,早期的時候我們會在牆上面去做很多的嘗試,其實我們早期也沒有太多的方向,當時做了非常多的風格嘗試。
接著我在地方出了一個這樣的小稿,這是一組黑暗中世紀題材的概念圖。出了稿子以後,當時工作室裡的每一個人看了稿子以後都覺得非常有興趣,大家出乎意料的一致,覺得方向可以試一試。
確定了目標以後,我又繼續做了一些人設的細化,那就有了現在這張圖是有劍士,有女巫,有貴族,獵魔人,重甲騎士等風格。
但是因為我們當時就10個人左右的人力,決定還是把體量控制的小一點,我們商量了一下,覺得做一款中世紀題材的動作對戰遊戲,可能是一個比較保險的方案。
然後就到了我們項目開始定初期目標,這階段我們覺得定的目標始終要量力而為,定一個可實際完成的體量,定一個可實現的玩法,而不是說我腦子裡有非常多、非常贊的點子,但是實際製作的時候處處碰壁,結果你只能完成它的60%或者70%。所以我們考慮了很多,希望把製作體量控制在一個可掌控的範圍之內,這是我們當時做的一個初期的聯機對戰demo。
當時10個人花了一年,做了一個已經可以刷到手機上的聯機對戰模式,可以WiFi聯機,就像《榮耀戰魂》一樣的PVP,但是當時確實遊戲性和畫面都沒有調的很好,遊戲內容略微有點單薄,所以我們決定加入一些PVE元素。
這是接下來為 PVE模式出的一張場景設定,一個看起來有點詭異而破敗的村莊。為此我們開始思考遊戲的世界觀和簡單的一些故事。
當時我們做了一個所謂基地的PVE玩法,怪物不斷從遠方湧過來,玩家保護基地,需要不斷的擊殺怪物獲得能量,然後用能量強化自身,不斷的迎接下一波怪物。
這個PVE玩法現在看起來非常簡單,但是對於當時來說,對我們來說確實意義非常重大,因為時候我們終於得到了一個像樣的遊戲框架,而且玩起來確實也蠻有趣,那給了我們前期非常大的信心,我們看到這一步了以後想想還不如把這塊好好做一做。
有幸的是場景最後被保存了下來。這個場景現在是我們最終上線了以後,第一關海格姆的畫面,基本保留了原來那塊區域,然後在這個基礎上又繼續擴展了場景,這個時候我們目標就比較明確了,項目正式開始推動起來,就像滾雪球一樣越滾越大。
關於世界觀的包裝,我覺得我們有一些自己的想法,特別是做一款手遊,當遊戲受到了體量的限制,我們不能去做地圖很大的這種遊戲,你就不可能讓玩家隨心所欲地去任何地方,那玩家一定會想為什麼我去不了對面那座山,我過不了對面那個河,時候我們一定要給玩家一個合理的解釋,讓玩家覺得這是一個合理存在的世界。
所以我們的做法,我們在項目上的做法是在世界上當時加了一個設定,比如說這個世界失去了光明,只有在有光的地方才是人類正常可以活動的區域。
那麼世界就需要一種發光體,可以讓故事可以讓劇情,還有整個世界聚焦,非常自然,我就設計了上面生物,它為世界帶來光明,人們依附他而活,形成了這個世界觀。
所以當時我們決定我們需要一個與世隔絕的被黑霧籠罩的世界。那這裡生活的人們的故事以及發掘這背後的秘密自然就成了劇情核心。我們創建的場景就會是生活在世界裡的人們的生態環境,同時也需要一個完整的故事鏈。
主線劇情就一點一點的,主要的人物一點一點的添加進來。然後世界觀的設定又不斷的完善,再回滾,在整個世界觀裡面不斷的回滾,關卡設計也在不斷的更新。最後我們得到了我們想要的故事體系和世界觀。
當世界觀設定好以後,我就希望世界中的一切體系,一些系統,包括玩法系統都是服務於世界觀的。所以當時設計了理智系統,這是一個絕望失控的世界,每個人都有可能在崩潰的邊緣,那麼主角當然也不例外。他看見的所有的瘋狂的事情,或者是這些瘋狂會燃盡他的所有的理智,他可能時時刻刻都處在理性和非理性的邊緣。
在混亂的世界中,當理智崩潰時會遇到什麼?看見的是靈異的怪物,是發狂的boss,還是背叛的隊友,這些都是通過遊戲的理智系統所表現出來的。但是還是在一個統一的世界觀之下,所以這是一個完整的包裝,不是說把玩法還有美術,還有劇情全部拆開來處理。我們希望無時無刻的提醒玩家,你正處在一個瘋狂的世界中。
畫面設定與取巧。當時考慮到我們就這麼點人力,還得想辦法去節省資源和減少工作量。所以我們做的這個世界觀的設定裡,外面的世界都處在黑霧中,整個遊戲都處在濃霧中,而且光源又很微弱,看不清遠處,所以遊戲的視距就不用開的很高,以及不用製作一些非常繁瑣的細節,也讓我們製作的實際體量確實小了很多。
關於上面這塊怎麼做,我會在後面的場景製作的一個環節裡會具體去分析,下面這是我們的一個主角團,還有一個動態的一個狀態。
在最開始做角色設計的時候,我們其實有考慮過很多問題,比如手機屏幕比較小,人物佔比會比較少,所以在設計的時候會把比例稍微做的誇張一點,物件的厚度都做得比較敦實,沒有特別細小的設計,基本上以體塊為主,這樣的話哪怕東西縮小了,在屏幕上並不是很大,你還是能感受到它的體積感和體塊感。
下面這張圖是基本的角色製作流程,比如從原畫到高模,再到一個材質的繪製。
材質繪製流程上,開始會用painter來對材質進行一個寫實的繪製,基本上是走PBR這套基本流程。
因為手機內存非常寶貴,貼圖使用有限,我們主要還是把重點放在了材質的調節上,下面是遊戲引擎裡還原出來的一個實際效果。
在做的時候我們基本上是一個全尺寸貼圖,會最終會根據遊戲的內存來進行一個優化。
我們基本上貼圖不會去專門去壓縮,像diffuse和specular可能會看情況進行一些壓縮,主要是看內存的盈餘,我們深入的去研究了unity的標準的standard的標準材質,而且Substance Painter和unity也做了非常好的銜接,幾乎一導出就可以只針對unity5的當時的那個標準材質可以輸出。
最終我們用到的貼圖有三種,一種是Specular這種金屬度或者是粗糙度,基本上是在阿爾法通道裡去調整,整體來說用的是一個比較省資源的做法。
這是另一個角色,她的特色是攻擊別人的時候,同時可以吸收別人的生命,存在身上的血瓶裡,這個血瓶會根據它的自身的攻擊,或者是對自身的回血上下浮動變化。
針對這個血瓶,當時我們是用Shader graph來實現效果,並且可以隨著人物的位移,你可以看到液體在裡面晃動,它基本上是可以保持水平面的一個移動。當然這只是做到一半,最終實際效果要比這個好一點。
這是我們的一個小罐。
主角團和boss我們基本上是使用了一個PBR的流程,但是因為主角或者是boss都是相對單數出現的,所以每個角色的材質球的數量控制可以控制的比較準,我們大概是做了3~4個,分為武器、服裝、頭頭髮和皮膚基本上分為這幾個材質球。
而普通的怪物在一款ACT遊戲裡,可能會在一個場景裡同時出現多個,所以基礎用的材質相對比較簡單。雖然說用的比較簡單,但是我們還是跟boss是一個生產流程,是用Substance Painter裡面來導出出來的傳統,只不過說是材質球用的是比較一個傳統的材質球,它的一些反射度或者什麼,基本上用的是一些反射環境球來模擬的。
下面這是一個boss,遊戲裡會有非常多的這種非人性boss,給動作確實添了很多麻煩,我們角色有300多根的骨骼,不過是因為在特定戰鬥場景裡只有主角和boss,所以這種消耗也是能消耗得起的,還能接受。
大型boss戰我們使用的都是骨骼碰撞,會根據打擊點的部位做出IK的受擊反饋,比如說弱點受擊判斷。而小怪基本上使用的是膠囊體碰撞,這就是剛才說過的一個場景裡,單個一個怪和很多很多怪,中間要做一個取捨。
然後是場景製作,這裡我會舉一個具體的例子,我們的阿達米亞的一個場景來解析一下它的製作流程。
從製作思路上來說,第一關結尾的時候,剛剛向玩家展現出了這麼一個世界觀,玩家剛剛知道頭頂的那個大月亮其實是一個我們遊戲裡的一個巨像,在正對著你。
這一關就希望非常明確的讓玩家知道這是一個什麼樣的世界,所以這一關的主題就是要玩家始終能看到巨像,希望達到的效果就是整個遊玩過程中可以看到這個大傢伙就一直在你身邊行走。
大概確立了劇本以後,首先我會先出這樣的一個概念設計圖傳達出大的思路方向,以及確立一些主要的特殊事件場景,因為當時第一關畫面有點陰暗,那希望第二關可以明亮起來,但是又要有那種詭異孤寂的氣氛。所以思路明確了以後,就用unity的地形工具,以及簡單的一些石塊刷,快速出一個layout,這個主要是用來提供給策劃,讓他們明白整個關卡和氣氛還有大的一些結構。
那關卡策劃在看了layout以後和概設,他可能大概就明白了,像阿達米亞這樣的一個場景,它是一個以懸崖為主題的場景,在接下來進入白盒階段的時候,就不會因為理解錯誤而走偏方向。
為什麼要做這一步?就是如果你直接讓關卡來搭,很有可能會完全氣氛上、劇情上,還有一些美術的結合,它不是能很好的結合在一起。所以一開始雖然是多做了一步,但是你只要傳達出一個概念或者給出一點元素後,對後期來說其實是會省很多問題的。
到了這一步我們交給關卡設計師進入白盒階段,在這個階段就是不斷的完善回滾,把角色放進去,不斷的測試,不斷的測試玩法、測試路線,待整個關卡驗證完成以後,那開始用美術資源逐步的代替白盒。
這是一個當時做的關卡的白盒測試,主要是用來測試路線和場景比例,即使是這樣,有時候還是會出現比例問題,白盒階段要搭場景,記得一定要搭得寬大一點,可能會看起來有點空,但是隨著中後期,你那些中景或者一些細節東西放進去以後,慢慢會變成一個比較舒適的比例。
我們在做帕斯卡的過程中,確實有好多次做白盒的時候感覺還行,但是小物件一添加後,幾乎沒有戰鬥空間,最後只能砍掉重來。所以這也是一個需要注意的點,希望大家引以為戒。
然後是場景的路線優化。在階段我會要求關卡,策劃同學特別注意,因為我們後面會用到剔除遮擋和視錐裁剪這兩個東西,所以我們前期的時候規劃的時候一定要特別注意,在路線設計的時候,要多轉幾個彎或者進入室內,或者是你讓遠處的視野裡被一些巨大的物體遮擋住。所以遊玩路線也會決定遊戲後期的優化方不方便。這主要是控制視野內的模型面數與Draw call。
作為手機遊戲在前期的時候規劃路線的時候,確實應該要考慮到更多方面。這是剛才說的遮擋剔除。
比如說場景儘量減少出現一條又長又直的路,或者是視野範圍特別寬廣的地方,比如說像上圖綠色的裡面的露出,就是綠色部分裡露出的遠景,其實運算量還是能接受的。
更遠處的景其實已經被其他遠處的房子剔除掉了,基本上不會參與運算,那如果真的你有特別大的需求,要做一個大的這種大視野的場景,一般這種也是會專門去定製,比如說你要做一個特別大的塔,從底層到高層也都可以看得特別清楚,那你可能只是底層這一段會做的比較精細一點,上面可能也就是透掉了,或者是做簡化處理。
然後說到場景材質這一塊,場景材質我們基本上是用的Substance Designer來製作,整場景的材質球數量控制是相對比較嚴格的,基本上30~50之間,一個場景的所有的材質球,但是確實也造成了一些問題。
帕斯卡契約本身場景有一種材質重複度過高的問題,但這就是兩邊的一個取捨了,你是大的場景、內容,要麼內存會爆,要麼你就是在視覺上會做出一些妥協。
這是用designer來做的一個磚牆的材質,那designer的最大優勢我覺得是可以快速的用連接節點這些,根據需求快速修改,快速迭代,效率會非常高,做出來的東西你也可以根據一些實際的需要進行修改和加工,非常節省成本。
尤其是當場景比較大,特別宏大,需要很多材質需要重複使用時,designer 製作材質它可以重新採樣,隨機生成一道符合美術風格的新的材質,大大節省了時間成本和人力成本。
我們項目中其實並沒有使用 unity的那套地表編輯器,主要是因為我們地表的場景有時候會達到3~4層,而且地表的面積相對也比較窄,用編輯器比較難處理,對後期優化也比較困難,不過是要看具體項目需求的。
如果是項目比較開闊,地圖開闊或者平整的話,unity的地圖編輯器其實是相對非常成熟的。我們這裡其實是做了一個材質球,通過一張MASK貼圖來混合兩種地表紋理,用頂點色其實也是可以達到相同的目的。
說到燈光這一塊,場景製作的場景光照,整個遊戲是使用了實時燈光加烘培,加light Probe。這三塊那實時燈光這一塊的話是角色和怪物的,還有場景裡的實時燈光,這三塊燈光其實是分開的。其實主要是為了方便調整場景的光線,整體場景用的是一盞mix燈,來提供整個場景的主光線,角色和怪物是用另一盞實時燈光來打整個人身上的明亮度和高光。
烘焙這一塊我們主要使用的是混合燈光進行烘焙,模式使用的是Shadow Mask這種烘焙模式我們在用的時候有一個小小的問題,就是它暗部被覆蓋的面積比較大時,高光會被這張MASK貼圖蓋住,會造成整個暗部比較平,針對問題我們使用了兩種方法來解決。
一種是在材質上,在場景的本身材質上給一個環境反射貼圖,讓材質在暗部時看起來也會有高光和立體度。另一種是在一些非常特殊的情況下用的,在材質上模擬一個反向的光,就是讓我們的程式設計師在材質裡就寫了一盞反向光,它是一些比較特殊的情況在用的。再加上人物走進陰影裡的時候,自身會打開一盞點光源,我們在一些山洞裡或者是洞穴裡,或者是一些黑暗的建築內部都會這樣處理。
烘焙的時候可能有些注意的點就是儘可能減少lighting map張數來控制整體的Draw Call。比如說像我們項目,用了很非常多的預製組件,就是Prefab那是相同的模型和相同的材質,但是由於你不會被分布在兩張不同的lighting map上,那它的Draw Call其實是不會合併的。
這也就是有一個非常大的矛盾點,如果你lighting map使用得過多,那Draw Call可能會多,但是如果你使用得少的話,你就要控制住lighting map的尺寸,否則陰影會很模糊。所以lighting map的UVS的分布,一個是會造成陰影模糊,一個是會造成內存增加,這兩個是需要你在做項目的時候去進行一些取捨。
關於light Probe,主要我們是用來給一些動態物體附著光影,比如說角色、怪物還有一些可互動的機關,後來我們就發現場景裡有一些特別小的物件,其實用烘焙的效果不是很好。
因為那個小物件本身UV就很小,你這張lighting map最後一壓縮,那個UV會聚焦在幾個像素點上,那個像素點如果你沒有處理好的話可能就是黑片。但是如果完全不著色的話,這些物件在暗部和亮部的表現是完全一樣的,那就非常奇怪,物體在暗部的時候可能會表現有點亮,它在亮部的時候可能又表現得非常暗。所以我們最後後期就改為使用light Probe進行著色,因為物件本身比較小,你放在那裡,放在暗部裡,本身會著一個比較暗色的,其實也看不大出來,反而會比你烘焙的效果更好一點。
打光這塊,因為場景的重複度比較高,所以我們在製作的時候有一個概念,就是一定要用燈光來給玩家作為記憶點,這就造成了光對我們來說非常重要,使用相同的素材,要根據打光的不同,營造出不同的場景氣氛,這點是對我們來說在整個製作場景中的一個難點。
說到整個遊戲的陰影。遊戲陰影這一塊是分為角色陰影、場景陰影,還有一些其他動態陰影。用我們投影的方法其實也是一個較為通用的做法了,用專門的投影相機,按照光照方向給場景、角色拍一個剪影,拍到RT貼圖上,再根據投影投射到地表上,這樣做的話可以無論再多的怪和角色,那隻產生一次Draw Call,超出主角的範圍又可以不會被渲染,而且你可以根據這張RT貼圖,這張RT貼圖的格式設置,你可以做一些處理,還可以加一些抗鋸齒什麼的。
場景陰影,我們基本上用的就是傳統的烘焙陰影,其他動態陰影,比如說像雲霧投射下來的這些陰影,基本上是用跟角色一樣的,是用RT貼圖來實現的。
場景裡的物件動畫,像植被,還有飄著的旗子什麼的這些,我們基本上是用頂點動畫來完成的,相對來說比較省資源。除此之外,人走到草上把草壓彎是以人物坐標與草的位置遠近,程序控制,頂點偏移來實現的。
視距這塊是如同前面所說,我們世界觀的時候設計的比較討巧,整個世界是處在黑霧之中,所以我們的這個遊戲fog開得非常強。如圖例所示,這幾個紅圈基本上幾乎都是霧氣了,你裡面其實都可以不要有細節了。
那我們只要留下大石頭的剪影,還有一些建築的剪影,其他基本上能關的都關了,這樣的話我們做起來其實就是把這些所有的物品進行分組,根據體量分組,越大的物體它的可視範圍越遠。
例如一些建築剪影,或者一些造成整個場景的一些大石頭,越小的物體它的格式範圍越近,基本上參照這個規則,所有的物體會被分到不同的層裡,然後去給每一層去做一個可視範圍的設置,再加上LOD,這樣可以大大的減少消耗。
其實像我們這樣做了以後,LOD的工作量也就不是很大了,所以我們遊戲裡LOD用的並不是很多。
霧氣這一塊,霧氣分為體積霧、定製霧片和基礎霧。體積霧我們是用一些Shader模擬的,基本上就是傳統God Rays的那種效果,然後定製霧片是用渲染粒子實現的,基本上是我們整個遊戲裡面的定製霧片,基本上是放到地上的一些模擬流動的雲霧,靠近會消失,然後你用軟粒子也不會出現硬邊,一個比較方便的做法。
鏡頭調節這一塊,因為遊戲裡的敵兵種類體型跨度都非常大,針對不同的體型和怪物,我們去做了一套專門調節鏡頭的工具,可以說每一種怪物你鎖定他的時候都是專門獨立去調節的,你在這個過程中還會去考慮這個怪物它的攻擊方式。
比如說遠程法師它的攻擊拋物線比較高的話,我們鏡頭當時調的時候,距離和鏡頭的遠近都會拉得相對比較寬一點。
在製作角色面部表情和口型動畫上,我們簡單的為角色設置了22個面部骨骼點來實現遊戲中面部所需要的基礎動畫,口型和表情其實都是提前設置好的一段動畫片段,然後會根據音頻調用這些調用融合的這些片段。
對於Blend Tree這一塊,對3D遊戲來說,不管是手機模擬搖杆,還是手柄搖杆,其實玩家在操控這些角色移動的時候,都可以朝任意方向來進行移動,例如我們當時在設計維奧拉的時候,那鎖定目標以後的移動方式,為了拉開和另一個角色泰倫斯的區別,我們大概設計了10種,前後左右、斜上斜下10個動畫片段來做融合,這就是當時維奧拉的一個Blend Tree。
除了一般的走路位移動畫之外,角色的攻擊動畫也佔據了非常大的一部分資源,其中攻擊和受擊的邏輯判斷非常重要,我們通過結合狀態機的參數制,自定義曲線取值,讓程序去分析當前的動畫邏輯狀態,實現角色在攻擊動作時的一個目標的判斷。
比如說武器判斷,根據預定的攻擊類型編號,然後去調取相應的攻擊碰撞盒來實現這些做法。另外像攻擊中是否可以轉向,然後攻擊碰撞打開的時機,還有連段判斷等等,我們在項目製作中其實是花費了大量的時間來去調這些Curve的參數,這些調整的結果都直接影響了整個遊戲的手感,特別像動作遊戲,你這些手感的好壞其實都去拉這些曲線來實現。
我們整個遊戲可能有非常多的工夫是在不停的去調整這些曲線上,然後我們整個角色是用了全身的IK系統,包括人物瞄準、腳步IK,然後收集IK的,比如說現在看到的這張圖就是人物站在不同的地表上,腳部骨骼會做出一些變形。
關卡製作,我們在做關卡的時候,其實為敵兵製作了非常豐富的狀態機機制,製作了若干種休息動畫,隱藏的攻擊動畫,你會在整個遊戲中看到有的怪物它隱藏在角落,在這偷襲你,這些其實都是專門定製的,然後怪物都會有視覺和聽覺方向還有範圍。
比如說像這張圖裡黃色的圈,就是一個聽覺範圍,紅色的三角區是視覺範圍,如果怪物在沒有看見你的情況下,你慢走的話是不會驚醒他們的,但是如果你跑過去可能就會引發他們的攻擊。
關卡中是採用了動態加載的方式加載怪物的,加載場景時會把這些怪物預先放到內存裡,場景中放了很多點,然後又放了很多專門設置過的這種顯示盒,就是這種綠色的盒子,只有角色進入這個綠色的盒子範圍內的時候,綠盒子範圍內的怪物才會被動態加載,這樣的話可以比較穩妥的控制怪物的加載上線,而且也可以比較精確的控制,我想哪些怪顯示,哪些怪不用顯示。
最後談一談過場動畫。說到過場動畫一般是我跟編劇先聊,聊完確定了大概的劇情,然後先出一個故事板,把腦子裡的想法一些畫面先具像化,加上策劃以及程序來一起推敲修改。
這個階段主要是確定一些效果是否能實現,如果不行的話,那可能還要商量一個可行的方案,再不斷的繼續的去修改故事版。
當故事板確定了以後,我們會在max裡面去做一個layout,這個主要是用來確認故事結構以及鏡頭的合理性。
這個階段不會去加面部表情,加口型,而且會拿給配音去做參考,待他們把配音部分完成以後,那確認沒有任何問題,才會繼續添加表情和口型。
遊戲中有一些比較複雜的過場動畫,為了不佔用過多的內存資源,我們自定義了一套及時加載系統,在演出完成後也可以立即釋放出遊戲內存。那根據預設的攝像機,調用角色ID以及相應的過場動畫資源,那比如說場景風格,一些燈光和一些音效等等。同時程序也可以通過代碼來控制美術的表現。
Unity的Timeline功能非常強大,早期的時候我們其實並沒有使用,是用笨的辦法,去實現遊戲裡的一些過場需求。那待unity Timeline功能實現了以後,我們很早的就投入去使用這個東西,然後發現使用了以後確實非常棒,效率直線提升,而且我們結合了自身的項目,設計了一套狀態控制器,可以通過判斷當前操縱的角色,動態的調用相應的一些演出動畫。
另外在一些簡短的動畫中GamePlay狀態下,也可以做一些簡單的一鏡到底的方式。
以上就是我為大家帶來的分享。其實我們並沒有用一些特別複雜的,或者是自己自定義的功能,其實用的還是unity本身的強大的那些功能。這些東西的怎麼靈活運用?我想,透過我們這個項目、通過今天的分享,能給大家帶來一些思考,謝謝!
推薦閱讀
原神改變了什麼|王者榮耀IP|動物派對專訪
英雄聯盟手遊|我們把公司做死了|技術中臺
Q4產品儲備|二次元遊戲困局|發行大困局
最新的遊戲專業書上架啦!點擊下方小程序即可獲取