UWA学堂|逻辑代码模块
本文主要為大家推薦UWA學(xué)堂中邏輯代碼的相關(guān)課程,涵蓋了C#、Lua、Garbage Collection以及DOTS等四個子類。
在UWA學(xué)堂界面中的“分類“選擇邏輯代碼即可查看相關(guān)課程。
無論對于從業(yè)者還是正在讀大學(xué)的技術(shù)萌新,學(xué)習(xí)的有效時間和個人時間都是有限的。高效學(xué)習(xí)者最在意的是時間的價值,一個需要體系化的知識地圖就顯得尤為重要。
零基礎(chǔ)
C#
《C# 知識體系構(gòu)建》
市面上有很多書籍和專欄是介紹C#基礎(chǔ)或者進階特性的,無一例外,都是從頭到尾羅列一遍C#特性,然后針對一個個特性去進行講解和介紹,這種閱讀體驗相對會比較枯燥。閱讀一些大部頭的書籍又要占去了大量的業(yè)余時間,而有些讀者僅僅是想知道其中的某一個語法特性或者僅僅是想達到一個能夠開發(fā)項目的程度,在讀者當時所處的階段也許并不需要完全地了解C#的每一個語法細節(jié)和原理。基于以上的種種原因,本課程誕生了。
通讀本課程,讀者不僅能夠過一遍常用的C#語法特性,還可以目睹一個知識體系構(gòu)建的過程,最終還可以得到一個基本的C#知識體系。有了一個基本的知識體系之后,未來C#發(fā)布新的特性時,我們能減少一些恐慌的情緒,知道這個新的特性也許只是一個小的改進,也許是一個革新的特性,可以非常容易地把這個特性歸納到我們現(xiàn)有知識體系中,這就是知識體系的一個小作用。在筆者介紹C#的語法特性的過程中,筆者會花費更多的篇幅去介紹不怎么常用但是很重要的C#特性,一些大家比較了解且常用的,尤其是在網(wǎng)上隨便一搜就能找到的語法特性筆者則會簡單帶過。
如果想要有一個基礎(chǔ)的C#知識體系或者好奇一個知識體系是怎樣產(chǎn)生的,又不想花費太多時間去看大部頭的同學(xué),非常推薦購買本課程。但是并不是說,學(xué)習(xí)完本課程后就可以不用看大部頭了,大部頭還是要看的,不過可以留到時間非常充裕的時候再去看,而且學(xué)習(xí)完本專欄之后再去看大部頭會節(jié)省更多的時間。
初階
Lua
《“typesys”接入Unity初體驗》
文章主要介紹了Lua類型系統(tǒng)typesys是如何接入Unity的,以及接入后的使用范例。分別從“靈魂拷問”、“庖丁解牛”、“學(xué)以致用”、“拋磚引玉”這四個角度來詳細闡述。讀者朋友們能夠在文章中與作者進行深度的思想交流,還能在最后拿到范例工程的源碼。由于源碼是基于typesys來編寫的,所以學(xué)習(xí)過課程《用Lua打造類型系統(tǒng):typesys》的讀者可以即開即用。為了讓讀者朋友們能夠形象且直觀地感受typesys在Unity里的應(yīng)用,作者將用其做第三人稱3D游戲的基礎(chǔ)3C(角色、相機和控制),能夠直接在Unity運行看到效果。
本課程屬于基礎(chǔ)課程,適合所有讀者。
進階
Lua
《Unreal引擎中Lua代碼的性能瓶頸定位與優(yōu)化》
目前,隨著大家項目對于熱更新的需求越來越高,Lua腳本與Unreal引擎的結(jié)合逐步成為了大型項目開發(fā)的熱門選擇。但是,隨著Lua腳本在項目中的重度使用,其和引擎結(jié)合后的性能問題就不斷地凸顯出來。因此,我們針對Unreal引擎開發(fā)中看到的Lua性能問題進行分析和總結(jié),并通過示例講解如何對Lua代碼使用過程中的性能問題進行快速地定位和優(yōu)化。
這些問題主要包括:CPU耗時性能瓶頸、堆內(nèi)存分配的性能瓶頸和GC調(diào)用頻繁等。希望通過本課程,可以讓開發(fā)者掌握如何在Unreal引擎中更高效地使用Lua腳本,從而帶來性能更佳的游戲體驗。
《用Lua打造類型系統(tǒng):typesys》
文章主要介紹了用Lua實現(xiàn)的類型系統(tǒng):typesys,圍繞“為什么需要typesys”,“typesys有哪些功能”,“typesys能防御哪些錯誤”,“typesys的配置、優(yōu)化和擴展”等幾部分來進行闡述。讀者朋友們能夠在其中看到一些作者的親身經(jīng)歷以及踩過的坑。
為了讓讀者朋友們能更直觀地去體驗typesys,作者在附上typesys源碼的同時,還提供了typesys能防御的各類錯誤的示例代碼,每一個示例都可以單獨運行;甚至還用typesys做了一個小小的文字游戲,非常有趣,并奉上了全部源碼。
本課程屬于非基礎(chǔ)課程,適合有一定技術(shù)管理經(jīng)驗的讀者。
《基于“typesys”實現(xiàn)串行腳本框架》
文章主要介紹了用Lua實現(xiàn)的串行腳本框架:LT-scriptsys。分別從“靈魂拷問”、“庖丁解牛”、“學(xué)以致用”、“拋磚引玉”這四個角度來詳細闡述。讀者朋友們能夠在文章中與作者進行深度的思想交流,還能在最后拿到框架的完整源碼。由于源碼是基于typesys來編寫的,所以學(xué)習(xí)過上一篇文章《用Lua打造類型系統(tǒng):typesys》的讀者可以即開即用。為了讓讀者朋友們能夠形象且直觀地感受本框架的應(yīng)用,作者將上一篇文章中創(chuàng)作的小游戲《尋寶吧,冒險者》使用本框架重寫了,并增強了樂趣體驗,代碼自然也是全部奉上。
本課程屬于非基礎(chǔ)課程,適合有框架編寫經(jīng)驗的讀者。
《一名普通程序員的犯錯日常- Lua-typesys的設(shè)計與演化》
在重度使用Lua進行開發(fā)的游戲項目上,如何有效地進行代碼管理?如何幫助編程經(jīng)驗并不那么豐富的年輕團隊盡量規(guī)避編碼錯誤?作者創(chuàng)作了一個輕量的、純Lua的類型系統(tǒng),試圖通過這樣的途徑來打造具備一定編碼防御性、可監(jiān)管性和可擴展性的基礎(chǔ)框架,使游戲項目開發(fā)變得更容易一些。此次分享將圍繞“為什么需要typesys”,“typesys有哪些功能”,“typesys的防御和監(jiān)管能力”,“typesys的配置、優(yōu)化和擴展”這幾個大塊來進行闡述。每一塊都會與大家交流作者的設(shè)計意圖以及過程中面對矛盾時是如何進行抉擇的。除了純理論思考的部分,作者還會分享一些應(yīng)用實踐:在Unity項目中接入typesys;已經(jīng)將typesys應(yīng)用到自己項目中的朋友們的反饋等。
Garbage Collection
《UE4垃圾回收》
文章主要介紹了UE4垃圾回收系統(tǒng)的實現(xiàn)原理。UE4在C++上封裝了對象系統(tǒng),并添加了反射,從而實現(xiàn)基于C++的垃圾回收。開發(fā)者使用UObject時不用手動管理內(nèi)存,兼顧了效率與便利。
UE4使用“標記清掃”GC算法,文章首先介紹了“標記清掃”的基本原理。UE4的GC算法可分為標記和清掃兩個階段。
1)標記階段
標記階段是GC算法的重頭。UE4會從“根集”出發(fā),根據(jù)引用關(guān)系,搜索內(nèi)存中所有可達UObject。為了加快搜索速度,一方面使用多線程技術(shù)并行搜索,另一方面通過反射生成ReferenceTokenStream,提升遍歷一個UObject引用關(guān)系的效率。
2)清掃階段
標記階段收集了所有可達UObject,其余不可達UObject被視為垃圾,它們會被UE刪除并釋放內(nèi)存。由于垃圾之后不可能再變得可達,因此UE可以分幀清理它們,避免卡頓。
文章屬于中級課程,適合對UE4開發(fā)感興趣的讀者。
《Unity的GC優(yōu)化原理及實踐》
本篇文章分為十個部分來講解堆內(nèi)存的內(nèi)存優(yōu)化。我們從原理入手,以遞進的關(guān)系講解了邏輯開發(fā)中會遇到的各種堆內(nèi)存分配(GC Alloc)相關(guān)的“坑”。本文將依次重點講解以下幾個部分的堆內(nèi)存優(yōu)化技巧:從對象和結(jié)構(gòu)體的內(nèi)存結(jié)構(gòu),到對象池,再到不安全代碼,也包含利用 .NET 4.x 和 UnsafeUtility 進行優(yōu)化的技巧,最后提供了Protobuf優(yōu)化和字符串操作優(yōu)化等具體案例。非常適用于參與邏輯開發(fā)或?qū)Χ褍?nèi)存GC優(yōu)化感興趣的同學(xué)們。
DOTS
《DOTS深度研究之原理分析篇》
DOTS全稱是Data-Oriented Tech Stack,翻譯過來就是多線程式數(shù)據(jù)導(dǎo)向型技術(shù)堆棧(DOTS),它由任務(wù)系統(tǒng)(Job System)、實體組件系統(tǒng)(ECS)、Burst Compiler編譯器三部分組成。DOTS保證相同類型組件在內(nèi)存中都是順序排列,極大程度增加緩存的命中率,此外配合任務(wù)系統(tǒng)(Job System)讓開發(fā)者無需頭疼多線程同時訪問數(shù)據(jù)需要手動加解鎖的麻煩,最終加持Burst Compiler讓性能飛起來。文本以最新的Unity 2019.3版本,學(xué)習(xí)DOTS的原理、ECS系統(tǒng)原理、Burst Compiler原理和JobSystem原理,帶你掌握DOTS讓游戲性能提升2000倍的秘密。
《DOTS深度研究之應(yīng)用實踐篇》
在《DOTS深度研究之原理分析篇》中,我們詳細介紹了DOTS的工作原理,讓大家可以深入理解任務(wù)系統(tǒng)(Job System)、實體組件系統(tǒng)(ECS)、Burst Compiler編譯器的工作方式。雖然DOTS可以大量提升游戲性能,但是如何才能快速且有效地應(yīng)用在具體項目中呢?有的項目剛立項,也有的項目已經(jīng)開發(fā)了一半,美術(shù)是否抵制DOTS的開發(fā)流程?諸如此類的問題接踵而至。
Unity引擎為了讓傳統(tǒng)游戲?qū)ο蠓绞睫D(zhuǎn)成DOTS的流程已經(jīng)做了很多努力,但是仍有提升空間。比如,目前擺在實際項目中的兩大頭號難題,烘焙貼圖的應(yīng)用和DOTS動畫系統(tǒng)的應(yīng)用,這兩個問題官方都沒有提供直接解決方案,但是可以在本文中找到間接實現(xiàn)的方法。
本篇文章還提供了大量的例子,全面地介紹了如何快速應(yīng)用DOTS,并且還提供了工程源碼方便大家學(xué)習(xí)與調(diào)試。
《DOTS在Unity引擎不同模塊中的應(yīng)用》
在最新的Unity引擎中,DOTS功能可以使開發(fā)者更方便地應(yīng)用面向數(shù)據(jù)編程模式以及利用引擎的并行特性。在本次報告中,我們將通過大量測試案例與性能數(shù)據(jù),探索DOTS對于游戲不同模塊的性能影響,以使大家能夠根據(jù)項目需要,合理地全局或局部對游戲模塊進行DOTS化。
高階
Lua
《Lua與C#高效共享大量數(shù)據(jù)的一種方法》
為何要在Lua和C#之間高效共享數(shù)據(jù)?讀這篇文章之前,我想先解釋一下,后面的內(nèi)容能夠為你解決什么:
眾所周知,Lua與C#跨語言交互很容易成為性能瓶頸,大量被浪費的CPU時間僅僅為了做一件事——從Lua傳遞信息到C#。為了減少交互次數(shù),我們不得不仔細設(shè)計,盡可能減少Lua和C#的耦合,但一些對數(shù)據(jù)依賴性很高的邏輯,比如戰(zhàn)斗邏輯中的AI邏輯或者技能邏輯就很難同時用兩個語言開發(fā),我們不得不在全lua(性能差)或者全C#(無法熱更)中二選一,難以根據(jù)需求混合使用雙語言以同時兼顧性能和熱更。
因此,我們提供了一種高性能方法,在Lua和C#之間,直接共享讀寫大量數(shù)據(jù),避開跨語言交互,從根本上移除跨語言傳遞數(shù)據(jù)的性能消耗。
數(shù)據(jù)高度共享意味著你有巨大的自由混合使用Lua和C#,因為兩個語言都可以高速讀寫同一套數(shù)據(jù)。從此不用為數(shù)據(jù)放在哪里、跨語言訪問數(shù)據(jù)會不會成為性能瓶頸而煩惱。
數(shù)據(jù)高度共享意味著你的熱更新覆蓋率更高,更容易做到新功能發(fā)布不需要更新本體包,哪怕是修改性能比較敏感的例如戰(zhàn)斗邏輯這樣的內(nèi)容。另外在需要hot fix bug的時候,因為數(shù)據(jù)是高度共享的,繞過C#直接解決問題的可能性就被大大提高。
數(shù)據(jù)高度共享意味著,不管為了性能還是為了提高熱更覆蓋率,在Lua和C#之間遷移代碼都會變得更簡單,因為數(shù)據(jù)兩邊都可以訪問,你很容易就可以將局部的一塊代碼轉(zhuǎn)移,不會因為數(shù)據(jù)依賴而大片地重寫代碼(特別采用類似ECS這種數(shù)據(jù)分離的方案時)。
新方案可以讓Lua和C#各自以接近語言原生的性能效率讀寫共享的數(shù)據(jù),相比通過Lua調(diào)用C#進行傳遞的方式,可以提升5~10倍的效率,跨語言共享數(shù)據(jù)將不再是性能瓶頸。
《wLua - 祖龍娛樂UE的Lua化開發(fā)解決方案全解析》
本議題將重點講解如何通過Lua來開發(fā)一套適合UE游戲項目的開發(fā)解決方案。其中不僅介紹UE如何嵌入Lua,而且詳細講解Lua與引擎接口、Lua與藍圖之間如何交互。同時,將更進一步講解如何使游戲開發(fā)全面Lua化,以及如何合理地使用Lua開發(fā)以Delicated Server為服務(wù)器的各種游戲。希望通過本次分享,可以對目前使用UE引擎進行游戲開發(fā)的研發(fā)團隊有所幫助。
以上就是我們本期為大家梳理的邏輯代碼學(xué)習(xí)路徑圖。需要說明的是,這個路徑圖并不是捷徑,相反13篇文章會更加訓(xùn)練大家的意志力。作為體系化的知識,我們希望大家能掌握背后的邏輯與原理,結(jié)合學(xué)習(xí)方法論并反復(fù)實踐,未來嘗試在自己的項目中創(chuàng)新創(chuàng)造出自己滿意的效果
往期回顧
《Unity引擎渲染模塊知識Tree匯總》
《Unity引擎UI模塊知識Tree》
《UWA學(xué)堂|開發(fā)流程模塊》
《UWA學(xué)堂|解決方案模塊》
《UWA學(xué)堂|優(yōu)化模塊》
總結(jié)
以上是生活随笔為你收集整理的UWA学堂|逻辑代码模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VSCode 初次写vue项目并一键生成
- 下一篇: Tecplot中如何提取水线面(自由表面