天天看點

GameFramework 學習筆記(一)

預設 你已經下載下傳了   GameFramework  UnityGameFramework.Runtime

使用源碼替換GameFramework.dll

這個  架構采用的是    manager of managers 的 架構形式  (如果不懂這個的話 看 這個)

下面這段是官網的話 

在最新的 Game Framework 版本中,包含以下 18 個内置子產品,後續還将開發更多的擴充子產品供開發者使用。
  1. 全局配置 (Config) – 存儲一些全局的隻讀的遊戲配置,如玩家初始速度、遊戲初始音量等。
  2. 資料結點 (Data Node) – 将任意類型的資料以樹狀結構的形式進行儲存,用于管理遊戲運作時的各種資料。
  3. 資料表 (Data Table) – 可以将遊戲資料以表格(如 Microsoft Excel)的形式進行配置後,使用此子產品使用這些資料表。資料表的格式是可以自定義的。
  4. 調試器 (Debugger) – 當遊戲在 Unity 編輯器中運作或者以 Development 方式釋出運作時,将出現調試器視窗,便于檢視運作時日志、調試資訊等。使用者還可以友善地将自己的功能注冊到調試器視窗上并使用。
  5. 下載下傳 (Download) – 提供下載下傳檔案的功能,支援斷點續傳,并可指定允許幾個下載下傳器進行同時下載下傳。更新資源時會主動調用此子產品。
  6. 實體 (Entity) – 我們将遊戲場景中,動态建立的一切物體定義為實體。此子產品提供管理實體和實體組的功能,如顯示隐藏實體、挂接實體(如挂接武器、坐騎,或者抓起另一個實體)等。實體使用結束後可以不立刻銷毀,進而等待下一次重新使用。
  7. 事件 (Event) – 遊戲邏輯監聽、抛出事件的機制。Game Framework 中的很多子產品在完成操作後都會抛出内置事件,監聽這些事件将大大解除遊戲邏輯之間的耦合。使用者也可以定義自己的遊戲邏輯事件。
  8. 有限狀态機 (FSM) – 提供建立、使用和銷毀有限狀态機的功能,一些适用于有限狀态機機制的遊戲邏輯,使用此子產品将是一個不錯的選擇。
  9. 本地化 (Localization) – 提供本地化功能,也就是我們平時所說的多語言。Game Framework 在本地化方面,不但支援文本的本地化,還支援任意資源的本地化,比如遊戲中釋放煙花特效也可以做出幾個多國語言的版本,使得中文版裡是“新年好”字樣的特效,而英文版裡是“Happy New Year”字樣的特效。
  10. 網絡 (Network) – 提供使用 Socket 長連接配接的功能,目前我們支援 TCP 協定,同時相容 IPv4 和 IPv6 兩個版本。使用者可以同時建立多個連接配接與多個伺服器同時進行通信,比如除了連接配接正常的遊戲伺服器,還可以連接配接語音聊天伺服器。如果想接入 ProtoBuf 之類的協定庫,隻要派生自 Packet 類并實作自己的消息包類即可使用。
  11. 對象池 (Object Pool) – 提供對象緩存池的功能,避免頻繁地建立和銷毀各種遊戲對象,提高遊戲性能。除了 Game Framework 自身使用了對象池,使用者還可以很友善地建立和管理自己的對象池。
  12. 流程 (Procedure) – 是貫穿遊戲運作時整個生命周期的有限狀态機。通過流程,将不同的遊戲狀态進行解耦将是一個非常好的習慣。對于網絡遊戲,你可能需要如檢查資源流程、更新資源流程、檢查伺服器清單流程、選擇伺服器流程、登入伺服器流程、建立角色流程等流程,而對于單機遊戲,你可能需要在遊戲選擇菜單流程和遊戲實際玩法流程之間做切換。如果想增加流程,隻要派生自 ProcedureBase 類并實作自己的流程類即可使用。
  13. 資源 (Resource) – 為了保證玩家的體驗,我們不推薦再使用同步的方式加載資源,由于 Game Framework 自身使用了一套完整的異步加載資源體系,是以隻提供了異步加載資源的接口。不論簡單的資料表、本地化字典,還是複雜的實體、場景、界面,我們都将使用異步加載。同時,Game Framework 提供了預設的記憶體管理政策(當然,你也可以定義自己的記憶體管理政策)。多數情況下,在使用 GameObject 的過程中,你甚至可以不需要自行進行 Instantiate 或者是 Destroy 操作。
  14. 場景 (Scene) – 提供場景管理的功能,可以同時加載多個場景,也可以随時解除安裝任何一個場景,進而很容易地實作場景的分部加載。
  15. 遊戲配置 (Setting) – 以鍵值對的形式存儲玩家資料,對 UnityEngine.PlayerPrefs 進行封裝。
  16. 聲音 (Sound) – 提供管理聲音和聲音組的功能,使用者可以自定義一個聲音的音量、是 2D 聲音還是 3D 聲音,甚至是直接綁定到某個實體上跟随實體移動。
  17. 界面 (UI) – 提供管理界面和界面組的功能,如顯示隐藏界面、激活界面、改變界面層級等。不論是 Unity 内置的 uGUI 還是其它類型的 UI 插件(如 NGUI),隻要派生自 UIFormLogic 類并實作自己的界面類即可使用。界面使用結束後可以不立刻銷毀,進而等待下一次重新使用。
  18. Web 請求 (Web Request) – 提供使用短連接配接的功能,可以用 Get 或者 Post 方法向伺服器發送請求并擷取響應資料,可指定允許幾個 Web 請求器進行同時請求。

這18個 内置子產品就是 18個不同的管理器    而這18個管理器是由GameEntry 進行管理。

那麼 GameEntry 和 這18個管理器是怎樣進行綁定的呢?

首先我們看   UnityGameFramework.Runtime 裡面的 GameEntry 這個類

GameFramework 學習筆記(一)

這個類中  有擷取遊戲架構元件  和 注冊遊戲架構元件 

GameFramework 學習筆記(一)

所有的 子產品都繼承 GameFrameworkComponent  而GameFrameworkComponent  繼承MonoBehaviour 

在 GameFrameworkComponent   Awake()方法中

GameFramework 學習筆記(一)

如何建立自己的子產品?

建立檔案夾

GameFramework 學習筆記(一)

建立場景 并且導入 Prefabs 中的Gameframework  效果如下

GameFramework 學習筆記(一)

建立檔案夾  建立 代碼  TestComponent

GameFramework 學習筆記(一)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace UnityGameFramework.Runtime
{
    public class TestComponent:GameFrameworkComponent
    {
        
    }
}
           

建立 空物體 命名為 Test 也就是我們要自己建的子產品  并給子產品添加 TestComponent 元件

GameFramework 學習筆記(一)

建立檔案夾  用于我們測試代碼的存放  建立代碼 用于測試

GameFramework 學習筆記(一)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GameFramework;
using UnityGameFramework.Runtime;

public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Debug.LogError(GameEntry.GetComponent<UIComponent>());
        Debug.LogError(GameEntry.GetComponent<TestComponent>());
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
           

把 test 挂到 相機上 然後運作遊戲

GameFramework 學習筆記(一)

他還報了一個錯誤 那是之後要講的流程部分。