《2019年Unity DOTS-高性能開發技術.pdf》由會員分享,可在線閱讀,更多相關《2019年Unity DOTS-高性能開發技術.pdf(29頁珍藏版)》請在三個皮匠報告上搜索。
1、.NET Core 2019China.NET Conf 2019Unity DOTS:高性能C#開發技術大中華區教育技術總監議程2什么是 Unity?什么是 Unity DOTS?Unity DOTS 精彩案例China.NET Conf 2019什么是 Unity?3Unity 是應用最廣泛的實時 3D 內容開發平臺一次構建,隨地部署超過 25 個業界領先的發布平臺支持China.NET Conf 2019什么是 Unity?4內容創作者需要什么樣的開發語言?orChina.NET Conf 2019內容創作者需要什么樣的開發語言,C+or C#?5實現特點:性能的準確性跨平臺架構特性不錯
2、的迭代循環安全性China.NET Conf 2019內容創作者需要什么樣的開發語言,C+or C#?6實現特點:性能的準確性跨平臺架構特性不錯的迭代循環安全性C#是非常自然的選擇:C#有很好的 IDE微軟 Roslyn C#編譯器中間語言修改經驗豐富使用 C#能避免 C+問題China.NET Conf 2019Unity 非常適合.NET 開發者7無縫使用 C#API:C#7.NET 4.7.NET Standard 2.0IL2CPP/Mono 代碼調試.NET 中現代 SSL/TLS 支持優化構建大小China.NET Conf 2019Unity 非常適合.NET 開發者8多款腳本開
3、發工具支持China.NET Conf 2019什么是 Unity DOTS?9面向數據技術棧Data-Oriented Tech Stack(DOTS)C#Job System|實體組件系統(ECS)|Burst 編譯器Your App or GamePackagesaaECSJobJobJobJobJobJobJob Scheduler&RuntimeNative ContainersUnity RuntimeBurstCompilerChina.NET Conf 2019C#Job System10面向對象設計Object-Oriented Design類(Classes)繼承(Inhe
4、ritance)封裝(Encapsulation)多態(Polymorphism)接口(Interfaces)China.NET Conf 2019C#Job System11面向對象設計Object-Oriented Design類(Classes)數據+行為繼承(Inheritance)類可以擴展或覆蓋其它類封裝(Encapsulation)多態(Polymorphism)接口(Interfaces)China.NET Conf 2019C#Job System12Unity OOD:AngryBots包含多個MonoBehaviour數據/處理耦合很大程度上取決于引用類型Transfor
5、mRendererRigidbodyColliderBulletApplyDamage.csSomeBehavior.csSomeBehavior.csTransformRendererRigidbodyColliderAnimatorPlayerHealth.csMovement.csShoot.csSomeBehavior.csSomeBehavior.csChina.NET Conf 2019C#Job System13“經典”的問題數據零散從內存加載到緩存非常慢DataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDat
6、aDataDataDataDataDataDataDataDataDataDataDataDataDataDataTransformRendererTransformRendererRigidbodyRigidbodyBehaviorBehaviorBehaviorBehaviorGame ObjectGame ObjectMemory(Simplified)China.NET Conf 2019C#Job System14“經典”的問題提供許多額外數據需要清理串行一次僅能做一個處理speed :Floattransform:TransformSomeMoveScriptup :Vector3
7、right :Vector3forward :Vector3position :Vector3localPosition:Vector3rotation :QuaternionlocalRotation:QuaternioneulerAngles:Vector3root :TransformgameObject:GameObjecthasChanged:Booletc.TransformChina.NET Conf 2019C#Job System15C#Job System 概要將數據與功能分開多核處理使用多線程技術GameObjectBulletGameObjectBulletGameOb
8、jectBulletGameObjectBullet Manager一些復雜的并行化功能SomeJobChina.NET Conf 2019C#Job System16現狀:計算平臺計算核心不斷地增加主流 CPU 4 6 個物理核心,8 12 個邏輯單元高端 CPU 可達 16 個物理核心,32 個邏輯單元但是大多數核心未被使用China.NET Conf 2019C#Job System17多線程問題:線程安全代碼很難存在競態條件上下文切換消耗較大解決方案:由 Job System 管理開發者只要完全專注于應用和游戲相關代碼China.NET Conf 2019實體組件系統(ECS)18EC
9、S 概念:由實體 Entity,組件 Component,系統 System 三者構成該架構專注于數據系統通過讀取由實體索引的組件數據流,將數據從輸入狀態轉換為輸出狀態。China.NET Conf 2019實體組件系統(ECS)19原型 Archetype:組件類型的唯一組合擁有相同組件集的實體,分類為同個原型如果某個實體的組件發生改變,它將可能被分類到新的原型,或者其它相同組件構成的原型China.NET Conf 2019實體組件系統(ECS)20內存塊 Memory Chunks:實體的原型確定該實體的組件存儲在何處由 ArchetypeChunk 對象表示的內存塊始終包含相同原型的實
10、體如果內存塊已滿,則會為使用相同原型創建的任何新實體分配新的內存塊。如果通過添加或刪除組件來更改實體原型,則該實體的組件將移動到其他塊中。China.NET Conf 2019實體組件系統(ECS)21BulletRenderSpawningPlayerRenderHealthEnemyRenderPositionPositionHealthPositionSpawningEntityData一些復雜的并行化功能Render JobRender SystemFilter:Render一些復雜的并行化功能Health JobFilter:一些復雜的并行化功能Spawning JobFilter:
11、Health SystemSpawning SystemPositionHealthRenderSpawningChina.NET Conf 2019實體組件系統(ECS)22ECS 優勢:默認最優性能更容易編寫高度優化的代碼更容易編寫可重用的代碼利用現代硬件架構原型緊密地包裝在內存中與 Burst 編譯器完美結合China.NET Conf 2019Burst 編譯器23GenericsMethodsStructsInterfacesGreat IDE SupportDebuggerForeachGarbage collectionReflectionVirtualNativeArrayC#
12、Subset高性能 C#High-Performance C#(HPC#)Burst 編譯器LLVM匯編代碼China.NET Conf 2019代碼示例:MoveForward24MoveForwardConversion.csChina.NET Conf 2019代碼示例:MoveForward25MoveForwardComponent.csChina.NET Conf 2019代碼示例:MoveForward26MoveForwardSystem.csChina.NET Conf 2019Unity DOTS 精彩案例:Keijiro 大神作品29China.NET Conf 2019ECS 獲取方式30Window-Package Manager-EntitiesChina.NET Conf 2019參考資料:31Unityhttps:/AngryBots-ECShttps:/ 作品https:/ System Cookbookhttps:/ Conf 2019