博客 / 詳情

返回

Unity GameFramework框架理論解析與應用實踐

本專欄是 Unity 生態中熱門的 GameFramework 框架系統性學習合集,專為解決開發者 “框架上手難、源碼看不懂、項目不會用” 三大痛點打造。內容涵蓋框架核心功能快速應用(模塊配置、資源管理、UI 框架、事件系統等)、詳細使用説明(場景適配、性能優化、跨平台兼容)、深度源碼分析(核心邏輯拆解、設計模式解讀),並結合 VR 遊戲、虛擬仿真教育真實項目案例,讓你從 “會用” 到 “精通”,真正掌握框架的底層邏輯與實戰技巧。每篇文章都包含實操步驟、代碼示例、問題解決方案,零基礎也能快速跟上,資深開發者可直擊核心源碼,提升技術深度。

張堯: CSDN博客專家、Unity3D領域優質創作者、《Unity 3D從入門到實戰》作者

先後任職於北京界源科技(VR 遊戲開發)、鄭州某公司(開發負責人),深耕 VR、虛擬仿真教育領域,主導多款商業項目從 0 到 1 落地。同時獲得 CSDN 博客專家、Unity3D 領域優質創作者頭銜,以及華為云云享專家、阿里雲社區專家、騰訊雲專家博主,累計輸出百萬字技術乾貨,幫助數萬開發者少走彎路。


目錄

1|框架介紹

2|GameFramework框架介紹

3|快速啓動

4|GameFramework框架內置模塊

4-1|全局配置(Config)

4-2|數據節點(Data Node)

4-3|數據表(Data Table)

4-4|內置模塊之調試器(Debugger)

4-5|下載(Download)

4-6|實體(Entity)

4-7|事件(Event)

4-8|文件系統(File System)

4-9|有限狀態機(FSM)

4-10|本地化(Localization)

4-11|網絡(Network)

4-12|對象池(Object Pool)

更新中...


本篇轉載自《Unity GameFramework框架理論解析與應用實踐》的第1節。

1.1 前言

這是GameFramework框架教程的第一篇,但是博主不準備直接就講GameFramework框架。

博主準備從框架開始説起,講講框架的“前世今生”,心急的小夥伴可以直接跳轉到下一篇:GameFramework框架介紹。


1.2 框架(Framework)介紹

1. 框架(Framework)是什麼

框架(Framework)通常被理解為一種基礎要素的集合,它們用於承載系統的必要功能。

在不同的技術和領域中,如IT和軟件開發,框架具有特定的意義和作用:

  • 約束性:框架定義瞭解決特定問題的邊界,並將相關的軟件組件約束在這個範圍內,以保持框架的內聚性和解決問題的專注性。
  • 支撐性:框架本身不直接解決問題,而是提供一個基礎的支撐結構,使得在其上構建的解決方案更為靈活和高效。框架通常會包括一系列的約定、配置和工具,這些輔助性工具幫助開發者簡化複雜任務,提高開發效率。

框架可以被視為一種未完成的半成品,需要在使用時賦予它具體的業務含義。

常見的例子包括模型-視圖-控制器(MVC)、WPF等,它們包含了對特定問題的解決方法的設計模式,以及一系列的工具和庫,以便於開發者快速搭建和維護應用。

綜上所述,框架是一種設計模式,旨在通過預定義的結構和規則來簡化複雜系統的開發過程,同時確保系統的穩定性和可擴展性。

PS:上面的內容摘錄自百度。

剛開始接觸框架的同學是不是感覺已經有點懵了,這裏我再用一個簡單的例子給大家解釋一下框架:

小明早上出門要去出差,他會在自己的包裏放入:牙膏、牙刷、毛巾、充電器、充電寶、紙巾、濕巾、U盤、鑰匙等等。

小明要取鑰匙,然後就在包裏翻了半天,最後把東西全部倒出來,才找到了鑰匙。

後來,小明找了一個女朋友小紅,小紅總是會在小明出門前將小明的包裏面的東西整理一下:

充電器、充電寶、鑰匙、紙巾、濕巾等常用的放在最外側的兜裏;

U盤小玩意放到內側小兜裏;

牙膏、牙刷、毛巾放到內包裏。

這樣,小明要找鑰匙的時候,直接去外側找,一下就找到了鑰匙。

這個例子呢,就很生動了説明了框架是什麼。

框架就是在架構內構建了一套固定流程,開發人員按照這個流程,以及條條框框進行開發,知道自己的函數寫在那裏,如何架構,會快速找到自己想要的東西,以此來提高開發效率。

框架指的是在某些應用領域具有通用的完備功能的底層服務,使用框架的編程人員可以在一個通用的實現的基礎上開始具體的系統開發。框架提供了抽象的默認行為類集合,具體的實現可以通過重寫子類或組裝對象來支持應用特有的功能模塊。

2. 為什麼用框架(Framework)

簡單説就是提高工作效率。

框架是一個可複用的設計構件,規定了應用的體系結構,設計了協作構件之間的依賴關係、責任分配和流程控制,表現為一組抽象類以及其實例之間的協作的方法。

作為一名程序員,在開發過程中會發現,有框架和沒有框架開發起來效率差距有多大。

一個好的框架可以帶來更快的開發效率、提高程序的健壯性和魯棒性、提高程序的性能、提高團隊協作、方便後續功能維護和拓展等。

3. 怎麼用框架(Framework)

使用框架的話可以先找一些框架的文檔、教程等東西先學習。

然後找一些案例進行學習,使用框架的功能,有不清楚的地方再回頭仔細看這部分額文檔。

當對於某個框架用的比較熟悉的時候,就可以分析框架的原理和實現過程,以及功能為什麼這麼設計。再用來優化之前的項目。

當然,更進一步的話,可以學習源碼,為框架做貢獻。

4. 怎麼設計框架(Framework)

框架與具體功能的實現不一樣,框架強調的是軟件的設計重用性和可拓展性。

好的框架是相對的,它有自己特定的應用領域,合適的才是最好的。

比如你做虛仿項目使用一個遊戲框架,裏面的網絡通信、幀同步、戰鬥模塊你可能永遠都用不上,這不就有點浪費了嘛。

言歸正傳,設計框架,需要在實際開發中的具體情況來看,細想架構需要分三層還是五層,每個層之間如何解耦,要用什麼設計模式。

當然,設計框架的目的還是效率,一些不常用的功能可以在寫的時候留下拓展方案或思路,在以後實際用上的時候再添加上,慢慢升級框架。

還可以在使用過程中提高能力和積累經驗,將學習到的新技術新知識融合到框架中,使得框架更加強大,更加健壯。

框架通過小步快跑,不斷迭代升級來慢慢拓展,當項目應用框架後,再根據新需求和碰到的問題去調整,讓框架更加強大。

設計框架的時候有以下幾個要求:

  1. 代碼模板化

框架一般都有統一的代碼風格,同一分層的不同類代碼,都是大同小異的模板化結構,方便使用模板工具統一生成,減少大量重複代碼的編寫。在學習時通常只要理解某一層有代表性的一個類,就等於瞭解了同一層的其他大部分類結構和功能,容易上手。團隊中不同的人員採用類同的調用風格進行編碼,很大程度提高了代碼的可讀性,方便維護與管理。

  1. 重用

開發框架一般層次清晰,不同開發人員開發時都會根據具體功能放到相同的位置,加上配合相應的開發文檔,代碼重用會非常高,想要調用什麼功能直接進對應的位置去查找相關函數,而不是每個開發人員各自編寫一套相同的方法。

  1. 高內聚(封裝)

框架中的功能會實現高內聚,開發人員將各種需要的功能封裝在不同的層中,給大家調用,而大家在調用時不需要清楚這些方法裏面是如果實現的,只需要關注輸出的結果是否是自己想要的就可以了。

  1. 規範

框架開發時,必須根據嚴格執行代碼開發規範要求,做好命名、註釋、架構分層、編碼、文檔編寫等規範要求。因為你開發出來的框架並不一定只有你自己在用,要讓別人更加容易理解與掌握,這些內容是非常重要的。

  1. 可擴展

開發框架時必須要考慮可擴展性,當業務邏輯更加複雜、數量記錄量爆增、併發量增大時,能否通過一些小的調整就能適應?還是需要將整個框架推倒重新開發?當然對於中小型項目框架,也不必考慮太多這些內容,當個人能力和經驗足夠時水到渠成,自然就會注意到很多開發細節。

  1. 可維護

成熟的框架,對於二次開發或現有功能的維護來説,操作上應該都是非常方便的。比如項目要添加、修改或刪除一個字段或相關功能,只需要簡單的操作,十來分鐘或不用花太多的工夫就可以搞定。新增一個數據表和對應的功能,也可以快速的完成。功能的變動修改,不會對系統產生不利的影響。代碼不存在硬編碼等等,保證軟件開發的生產效率和質量。

  1. 協作開發

有了開發框架,我們才能組織大大小小的團隊更好地進行協作開發,成熟的框架將大大減輕項目開發的難度,加快開發速度,降低開發費用,減輕維護難度。

  1. 通用性

同一行業或領域的框架,功能都是大同小異的,不用做太大的改動就可以應用到類似的項目中。在框架中,我們一般都會實現一些同質化的基礎功能,比如權限管理、角色管理、菜單管理、日誌管理、異常處理......或該行業中所要使用到的通用功能,使框架能應用到某一行業或領域中,而不是隻針對某公司某業務而設定(當然也肯定存在那些特定功能的應用框架,這只是非常少的特殊情況,不在我們的考慮範圍)。

5. 常用的Unity 3D框架(Framework)

5.1、MVC框架

基礎常用的框架

  • 表現層(View):遊戲畫面,UI
  • 邏輯層(Controller):數據接口,操作控制,AI
  • 數據層(Model):數據保存,圖片、聲音等資源

5.2 MVP框架

MVP從MVC演變而來,通過表示器將視圖與模型巧妙地分開。在該模式中,視圖通常由表示器初始化,它呈現用户界面(UI)並接受用户所發出命令,但不對用户的輸入作任何邏輯處理,而僅僅是將用户輸入轉發給表示器。

MVP的全稱為Model-View-Presenter,Model提供數據,View負責顯示,Controller/Presenter負責邏輯的處理。MVP與MVC有着一個重大的區別:在MVP中View並不直接使用Model,它們之間的通信是通過Presenter(MVC中的Controller)來進行的,所有的交互都發生在Presenter內部,而在MVC中View會直接從Model中讀取數據而不是通過Controller。

5.3 MVVM框架

MVVM 模式將MVP中的Presenter改名為ViewModel,基本上與MVP模式完全一致。

MVVM是Model-View-ViewModel的簡寫。它本質上就是MVC的改進版。MVVM就是將其中的View的狀態和行為抽象化,讓我們將視圖UI和業務邏輯分開。

MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構框架。它立足於原有MVP框架並且把WPF的新特性糅合進去,以應對客户日益複雜的需求變化。

5.4 PureMVC框架

最核心的三個層:Model,View,Controller。

PureMVC在傳統MVC基礎上做了許多的改進,通過結合多個“設計模式”的應用,讓耦合性變得更低,也變得更加地易用,在擴展性、靈活性、重用性方面也做得更好。

設計模式的存在,其實很重要的一個職責就是解決耦合性。PureMVC用到的這些設計模式,貫穿了整個遊戲框架,即便你項目中使用的不是MVC框架,你都離不開這些設計模式的應用,下面是PureMVC中使用到的設計模式:

  1. 代理設計模式
  2. 中介者設計模式
  3. 外觀設計模式
  4. 觀察者設計模式
  5. 命令設計模式
  6. 單例設計模式

5.5 MVCS框架

StrangeIOC中所指MVCS的“S”,為服務(程序外部的服務例如:Web服務)。

StrangeIoc是依據控制反轉和解耦原理設計的,支持依賴注入。

控制反轉即Ioc(Inversion of Control),它把傳統上由程序代碼直接操控的對象的調用權交給容器,通過容器來實現對象組件的裝配和管理。所為的“控制反轉”概念就是對組件對象控制權的轉移,從程序代碼本身轉移到了內部的容器。

依賴注入(Dependency Injection)的基本原則是:應用組件不應該負責查找資源或者其他依賴的寫作對象。配置對象的工作應該由Ioc容器負責。

5.6 ECS框架

Unity本身的組件開發就是ECS框架,ECS很適合遊戲開發,在遊戲引擎中比較常見,谷歌曾在Github上發佈了一個名叫Entitas的ECS框架,下面我們就來介紹:

  • Entity就是隻有數據的GameObject對象,不包括方法;
  • 每一個Entity擁有Component組件,負責Entity數據處理;
  • Group是擁有相同Component的Entity集合;
  • Context就是創建銷燬Entity的工廠;
  • Collector收集器提供了簡單的方法來處理Group中Entity變化的反應。

5.7 GameFramework遊戲框架

OK,説到我們這系列文章的主角了,GameFramework遊戲框架。

Game Framework是一個基於Unity引擎的遊戲框架,主要對遊戲開發過程中常用模塊進行了封裝,很大程度地規範開發過程、加快開發速度並保證產品質量。

內置模塊有:

◾ 基礎和工具

◾ 全局配置(Config)

◾ 數據結點(Data Node)

◾ 數據表(Data Table)

◾ 調試器(Debugger)

◾ 下載(Download)

◾ 實體(Entity)

◾ 事件(Event)

◾ 有限狀態機(FSM)

◾ 本地化(Localization)

◾ 網絡(Network)

◾ 對象池(Object Pool)

◾ 流程(Procedure)

◾ 資源(Resource)

◾ 場景(Scene)

◾ 遊戲配置(Setting)

◾ 聲音(Sound)

◾ 界面(UI)

◾ Web請求(Web Request)

完整的Game Framework包含三部分:

  • GameFramework – 封裝基礎遊戲邏輯,如數據管理、資源管理、對象池、有限狀態機、本地化、事件、實體、網絡、界面、聲音等,此部分邏輯實現不依賴於Unity引擎,以程序集的形式提供。
  • UnityGameFramework.Runtime – 依賴UnityEngine.dll進行對GameFramework.dll的補充實現。為了方便兼容Unity的各個版本,此部分已經以代碼的形式包含在Unity插件中。
  • UnityGameFramework.Editor – 依賴UnityEditor.dll進行對工具、Inspector的實現。為了方便兼容Unity的各個版本,此部分已經以代碼的形式包含在Unity插件中。

5.8 SFramework遊戲框架

Sunset Game製作組自主設計研發的一款Unity通用遊戲框架,設計思想類似MVC+ECS。

  • 不限於3D-ARPG遊戲的萬能框架Unity-Framework
  • 獨立設計開發的原創遊戲框架,持續更新中
  • 控制遊戲生命週期,框架儘量不繼承Monobehavior
  • 基於單例模式,外觀模式,橋接模式等設計模式
  • 可使用PhysX物理引擎,動畫幀事件等基於Monobehavior的功能
  • 代碼追求精簡高效,核心代碼僅5000+行

以上就是《Unity GameFramework框架理論解析與應用實踐》的第1節,此篇文章比較適合想快速掌握成熟框架,提升項目開發效率的Unity 初學者 / 進階者;需要針對性解決框架在特定場景的應用問題的VR / 虛擬仿真教育領域開發者;希望通過源碼分析提升技術深度,解決實際項目難點的在職 Unity 工程師;想了解框架架構設計,用於團隊技術選型與項目落地的技術負責人 / 項目管理者;以及對 Unity 框架開發、遊戲引擎架構感興趣,尋求系統性學習路徑的編程學習者

讀完全篇後你會獲得:

1、快速上手能力:掌握 GameFramework 框架核心模塊使用方法,1 小時搭建基礎項目架構;

2、源碼解讀思維:看透框架底層實現邏輯,理解設計模式在實際開發中的應用;

3、實戰落地經驗:獲取 VR 遊戲、虛擬仿真教育項目中框架的適配技巧與性能優化方案;

4、問題解決工具庫:覆蓋框架使用中 90% 的常見問題(資源加載異常、UI 層級衝突、跨平台兼容等)及解決方案;

5、技術背書加成:掌握主流框架技能,提升求職、晉升競爭力(適配 Unity 開發、VR / 虛擬仿真相關崗位需求);

6、持續更新權益:專欄將同步框架版本迭代,新增功能解析與實戰案例,終身免費查看。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.