什么是Tiny Mode
據說輕量版內核只有72KB;
只能發布H5,不能發布原生版(將來可能支持原生發布)
渲染默認使用WebGL,會Fallback到2D Canvas;
暫不支持3D;
必須使用ECS框架編程;
暫時只能用Typescript編程,將來轉為支持C#;
適合開發Facebook Instant Game(在Messenger App中玩的那種)、可交互廣告Playable、H5小游戲
官網文檔(0.13)
https://docs.unity3d.com/Packages/com.unity.tiny@0.13/manual/index.html
官網博客
https://blogs.unity3d.com/jp/2018/12/05/project-tiny-preview-package-is-here/
Solution (Instant 2D: Games & Playable Ads)
https://unity.com/solutions/instant-games/2d-games-and-playables
如何體驗Tiny Mode
下載Unity Hub,刪掉破解版的ulf文件,用正規賬號登錄,激活,在Unity Hub中選擇預覽版,下載2018.3
官方demo
https://tiny-match3.storage.googleapis.com/index.html
感想
就意味着老的項目和代碼很難快速遷移到Tiny Mode;
從官方demo的性能來看,ios的safari和PC的chrome比較流暢,但是安卓的原生瀏覽器中運行,感覺不太流暢
Tiny中的ECS框架
面向數據的設計(Data-Oriented Design)
將數據以 Cache 友好的方式組織,可以顯著提升程序性能。
測試程序分別以“基於組件的對象設計”和“基於數據的設計”兩種方式,對 50000 個 GameObject (或者叫做 Entity) 的 Transform 矩陣進行計算。核心的計算代碼都是一樣的,最重要的差別就是這些 Transform 數據的內存布局不同。測試的結果十分驚人,在我的電腦上前者要比后者慢 2.8 倍!
虛幻3、4引擎就是一個典型的以面向對象為核心設計思想的多線程架構。現在虛幻4包括主線程、渲染線程、RHI線程、Texture Streamming線程,IO線程、物理線程等等!就拿渲染線程和主線程的交互方式來看,首先你就會發現大量的冗余數據,游戲邏輯層的對象中渲染相關的數據,必須通過 Primitive Proxy 的方式拷貝一份,發送到渲染線程;其次,還是有很多對象是在兩個線程上同時要操作的,例如 View 系列的類,想改底層的話,分分鍾被鎖死!
面向數據的設計,從起點就考慮並行的問題! 在面向數據的設計中,設計的焦點是數據,首先要把數據理清楚,然后把邏輯分離出去。這樣做的最大的好處是,每個邏輯模塊對數據的讀或是寫是可以清晰界定的!這樣一看,那些計算可以並行,那些是互相依賴的,就一清二楚了!
這方面 Unity3D 的 JobSystem 是很成功的!每一個 Job class 可以通過指定 UpdateAfter/Before Attribute 的方式建立依賴關系圖,而引擎根據這個圖自動調度任務的並行執行!實際上,我認為UpdateAfter/Before 這個名字起的不好,因為本質上你不是在排序 Job 的執行順序,而是要思考對 ComponentData 的讀寫!
與“基於組件的對象設計”不同,ECS 架構中的 Component 只包含數據。例如使用 C++ 編程的話,Component就可以是 POD 類型(Plain Old Data)。Entity 也不是面向對象那樣把組件、行為封裝起來,而是只對應一個 ID。整個這個機制的設計使得所有組件可以在 World 中統一管理的時候,可以使用連續的內存布局,大大提高 CPU 的 Cache 命中率。
System 對於組件數據的“讀寫”是可以明確定義的。從這個數據的讀寫就可以分析出系統之間的依賴關系,形成一個 DAG。基於這種分析也就可以確定那些系統是可以並行執行的!典型的就是 Unity3D 的 JobSystem。
使用流程