共用方式為


資料系結和主題架構 - MRTK3

歡迎使用 MRTK3 資料系結和主題架構。 此架構的設計目的是讓您輕鬆地建立視覺化元素,這些元素可在執行時間由一或多個資料來源提供的資料動態填入和更新。

什麼是資料系結

資料系結是建立應用程式 UX (檢視) 與呈現 (模型) 之間連線的程式。 假設系結具有正確的設定,而且資料會提供適當的通知;當資料變更其值時,系結至資料的專案會自動反映變更。

熱門的資料系結架構:

  • Delphi
  • Windows Presentation Framework (WPF .NET)
  • Windows Forms
  • Angular
  • Backbond
  • JAVAFX 系結

Windows Presentation Framework 資料系結區塊圖

DATAbinding Windows Presentation Framework (WPF) 如需詳細資訊,請參閱 資料系結概觀 - WPF.NET


MRTK 對等區塊圖

MRTK 對等區塊圖


設計目標

  • 跨平臺部署
  • 支援資料來源的任何組織結構和來源
  • 輕鬆整合到現有或綠地程式碼基底
  • Designer和開發人員易記
  • 可在應用程式生命週期期間隨時啟用/停用
  • 支援真實世界、企業案例--後端 DB、複雜的 UX 預製專案範本
  • 輕鬆套用至現有的非 MRTK UX 元件和新的視覺元素
  • 系結任何資料類型,包括 Sprite、影像、材質、動畫和音訊剪輯
  • 輕鬆增強功能,而不需觸碰現有的程式碼基底
  • 有效率地使用 CPU、RAM、GC 和框架時間
  • 輕鬆整合各種本機或後端資料來源
  • 內嵌、執行時間狀態和後端資料來源的任何同時組合
  • 有效率地處理清單簡報的任何大小集合
  • 結合主題和資料系結,適用于可主題動態資料元素
  • 先以開放式方式驗證及操作變數資料,再呈現
  • 其他 MRTK 功能的最小相依性
  • 與 MRTK v2 和 MRTK3 相容
  • 輕鬆使用白色標籤和/或將商標套用至庫存資產,最少努力

重要功能

  • 開放式資料來源支援任何持續性、遠端或 RAM 資料策略。
  • 開放式資料取用者支援任何 UX 系結和主題需求。
  • 資料來源與取用者之間的自動探索可簡化勾點。
  • 系結設定檔的選擇性自動設定
  • 分離的資料模型和檢視支援 MVC 和 MVVM 模式。
  • 透過分頁和捲動流覽的虛擬化集合。
  • 針對平滑清單流覽的收集項目預先擷取預測性。
  • 集合物件可以共用並重複使用,以減少 GC。
  • 可以對應資料的差異和檢視索引鍵路徑命名空間。

目前功能

1.透過資料取用者將變數資料視覺化

目前支援:

  • TextMeshPro 和 TextMesh 文字
  • 文字樣式表單 (主題和協助工具)
  • Sprite 紋理
  • 布林值觸發程式
  • 四邊形紋理
  • 字型圖示
  • 集合:包含填入變數資料的預製專案的任意大小清單
  • 支援 IDataConsumer 介面的任何其他取用者, (直接或透過基類衍生)

2.使用各種資料來源提供變數資料:

  • JSON 文字 (直接或透過 URL 擷取)
  • 變數資料元素的字典
  • 物件 - 以節點為基礎的結構化資料
  • 任何 C# 物件的反映
  • 以程式設計方式改變的資料
  • 支援 IDataSource 介面的任何其他方法

3.列出專案放置器,以管理清單的視覺表現方式

4.列出分頁、捲動和虛擬化

  • 只有在可見或處理中時,才會擷取資料
  • 支援任意大型後端資料集
  • 擷取跨多個畫面格進行負載平衡

5.列出預製物件共用

  • 預製專案會重複使用並重新填入,以減少 GC 和具現化時間。

6.在執行時間動態套用主題至元素


藍圖上的功能

除了已提供的功能之外,更多功能的最高優先順序包括:

1.資料操作工具管線

  • 資料端與檢視端值之間的轉換
  • 當地語系化 (與 Unity 當地語系化) 緊密整合
  • 格式化
  • 驗證

2.預測性清單專案預先擷取,以加快/平滑捲動/分頁

3.更多資料取用者

  • 在元件上設定任何公用屬性
  • 設定開啟/關閉狀態的核取方塊
  • 設定滑杆值
  • 在群組中設定選項按鈕
  • 個別材質屬性,例如設定色彩

4. 主題

  • 即使未執行應用程式,仍可查看編輯器中套用的主題
  • 更新預製專案以反映套用的主題,使其成為預設主題
  • 主題/樣式繼承

詞彙

  • 資料來源 - 任何資料提供者,無論是執行時間狀態、本機保存或從伺服器擷取。
  • 資料來源提供者 - 簡單的 MonoBehaviour,可讓您存取可能無法在 Unity 場景圖表中公開的資料來源。
  • 資料來源類型 - 指派給資料來源的唯一名稱,讓資料取用者可以依名稱指定其所需的資料來源 () 。
  • 資料取用者 - 任何想要對資料變更採取行動的資料取用者,通常是視覺元素,但不需要。 例如,其用途可能是根據資料值變更來觸發動作。
  • 資料控制器 - 叫用動作的機制,其中包含目前提供做為參數的相關聯資料系結值。
  • Keypath - 參考資料源中特定物件的資料選取器。 如目前實作,索引鍵路徑格式會在 JSON 資料存取子之後建立模型,以解譯對應、清單和不可部分完成專案的任何巢狀組合。
  • 本機 Keypath - 資料取用者端索引鍵路徑,可永久內嵌在可重複使用的預製專案中。 透過解析集合實體和 Keypath Mappers,這會自動轉換成集合中特定專案的完全解析索引鍵路徑。 若未與集合相關聯,這些可以直接對應至資料來源中的資料,也可以先透過 Keypath Mapper 進行修改。
  • 完全解析的 Keypath - 對應至資料來源中一個特定物件的完整絕對索引鍵路徑。 對於集合中的專案,這是一個集合實體的完整解析索引鍵路徑,以及該集合實體之一個資料元素的相對 (本機) 索引鍵路徑的組合。

  • Keypath Mapper - 本機索引鍵路徑與資料來源功能變數名稱之間的選擇性命名空間對應程式 (,例如 「link」 < - > 「URL」) 。

  • 主題 - 資料來源,提供達成特定視覺美化所需的一組各種資產和樣式。

  • 專案放置器 - DataConsumerCollection 隨附,負責將可見專案放入場景中。

  • 資料物件集區 - 具現化、待命預製專案,可供填入低 GC 清單導覽的資料。

  • List Virtualization - 能夠填入、呈現及巡覽任意大小的清單。

  • 預測性預先擷取 - 預先擷取資料,並填入可能透過捲動/分頁來查看之專案的收集預製專案。

  • 預測性預先擷取 - 預先擷取資料和填入可能透過捲動/分頁查看之專案的收集預製專案。

重要概念

資料來源

資料來源是任意類型的任何受控資料集, () 和複雜度,可用來透過資料取用者填入資料檢視。 資料來源所管理的資料可以是靜態或動態。 任何對資料項目的變更都會回報給已註冊以接收變更通知的任何資料取用者。

資料來源提供者

具有單一方法來擷取資料來源的簡單介面。 這是為了允許資料取用者元件在遊戲物件階層中自動探索 MonoBehavior 腳本元件而設計。 不需要直接在遊戲物件本身上實作資料來源。 當現有的 MonoBehaviour 必須衍生自另一個類別,且多重繼承可防止衍生自 DataSourceGOBase 時,這非常有用。 它也允許更多程式碼沒有 Unity 相依性。

資料來源提供者單一

DataSourceProviderSingletonMonoBehaviour 可讓您指定可以自動探索的資料來源,即使它不是與想要接聽的 DataConsumers 位於相同的 GameObject 階層中也一樣。 只要將場景中的任何位置放在 DataSourceProviderSingleton 場景中,並以資料取用者所探索的任何資料來源填 Data Sources 入 屬性即可。 或者,資料取用者會逐步引導其父系尋找適當的資料來源,這表示您可以將資料來源放在這些資料取用者父鏈中任何位置提供所需資料的資料來源。

索引鍵路徑 (字串)

索引鍵路徑是唯一識別資料來源中任何資訊片段的機制。

雖然索引鍵路徑可以是每個資料項目的任何唯一識別碼,但目前的實作會使用邏輯使用者可讀取規範,指出與整個結構化資料集相關的資料巡覽位置。 它會以 JAVAscript 的清單、字典和基本概念為基礎來建立模型。 索引鍵路徑是語法正確的 JAVAscript 語句,可用來存取可在 JSON 中表示的資料。 此方法的優點是它與 JSON 和 XML 相互關聯。 這些是從後端服務傳輸資訊的兩種最普遍方式。

範例索引鍵路徑:

  • 溫度
  • contacts[10].firstName
  • 連絡人
  • contacts[10].addresses[3].city
  • [10].title
  • kingdom.animal.animal.aardvark.food.foodtypes.termites

假設索引鍵路徑是沒有必要分類法的任一字元串,實際的資料規範可以是描述要擷取之資料的任何方法。 XML 的 XPath 是可使用資料來源的可行索引鍵路徑架構範例。 只要資料取用者所提供的索引鍵路徑與資料來源預期的索引鍵路徑一致,所有專案都會運作。 此外,可以實作索引鍵路徑對應程式,以在不同的架構之間轉譯。

解析金鑰路徑

解析金鑰路徑表示合併兩個索引鍵路徑:

  1. 絕對索引鍵路徑,描述如何存取較大資料集的特定子集,例如許多專案清單中的一個專案。
  2. 部分 (相對) 索引鍵路徑,代表該清單或地圖專案內的特定資料。

如此一來,就可以處理資料的子集,如此一來,它就不需要在較大的資料集階層中實際存在的位置。 這項功能最重要的用法是描述清單中單一專案的資料,而不必擔心目前實例所參考的清單中哪個專案。

由於 DataSource 一律會產生並取用「完全解析」的索引鍵路徑,而且應該很少或永遠不會由 DataConsumer 或其他外部元件修改,因此它可以有任何對 DataSource 有意義的結構。 例如,如果有預製專案顯示相片的清單專案及其標題、取得日期和其他屬性,預製專案中的本機索引鍵路徑可能如下所示:

  • 「photo_url」
  • 「title」
  • 「date_taken」
  • 「description」

清單中一個預製專案的完整解析索引鍵路徑可能如下所示:

  • 「f3cb1906-d8b3-489d-9f74-725e5542b55d/photo_url」
  • 「f3cb1906-d8b3-489d-9f74-725e5542b55d/title」
  • 「f3cb1906-d8b3-489d-9f74-725e5542b55d/date_taken」
  • 「f3cb1906-d8b3-489d-9f74-725e5542b55d/description」

金鑰路徑對應程式 (IDataKeyPathMapper)

索引鍵路徑對應程式可讓資料來源和資料取用者針對金鑰路徑使用不同的命名空間和慣例,而且仍然可以一起運作。

常用元素的預製專案,例如用來顯示人員連絡資訊的平板,可以包含資料取用者所管理的變數欄位。 若要這樣做,用於預製專案之任何變數層面的識別碼需要一種方式,以對應至資料來源中正確資料識別碼的方法,在每次使用預製專案時,都會決定該變數元素的內容。 索引鍵路徑對應程式可達成此動作。

預製專案可以搭配不同的資料來源使用,其中資料儲存在不同的組織結構中,並使用功能變數名稱。 若要搭配每個資料來源使用範本預製專案,索引鍵路徑對應程式可以解決資料組織方式的任何差異。

資料取用者 (IDataConsumer)

物件,知道如何取用資料來源所管理的資訊,並使用該資料來填入資料檢視。

資料取用者可以向資料來源註冊,以收到資料集中指定索引鍵路徑上之資料項目的任何變更通知。 每當指定的資料變更 (或懷疑已變更) 時,資料取用者 () 會收到通知。

資料取用者集合

資料取用者集合已新增管理類似專案清單的功能。 此清單可以是資料來源所管理的整個資料集,或只是子集。 清單中每個專案的資料通常包含類似的資訊類型,但這並非必要專案。 資料來源和資料取用者可以支援巢狀清單,例如與連絡人清單中每張相片相關聯的關鍵字清單。 關鍵字的索引鍵路徑會相對於相片,而相片的索引鍵路徑會相對於人員,而人員的索引鍵路徑會相對於最接近的父清單或資料集的根目錄。

處理集合時,會將集合中特定專案的正確解析索引鍵路徑指派給針對每個集合專案具現化的預製物件中找到的每個資料取用者。 然後,用來完整解析該預製專案內任何相對 (本機) 檢視資料的索引鍵路徑。

資料收集專案放置器

集合資料取用者需要一種方法,以重複的視覺元素清單填入使用者體驗,例如產品、相片或連絡人的可捲動清單中可能找到的內容。 這可藉由將專案放置器指派給集合資料取用者來完成。 此專案置放器是邏輯 tha 知道如何要求清單專案、接受已填入變數資料的預製專案,然後將這些專案呈現給使用者,通常是將它們插入清單的 UX 配置元件所管理的清單。

佈景主題

主題會使用資料來源和資料取用者的所有管子。 無論是靜態還是動態資料系結至其他資料來源,都能夠將 GameObject 的任何階層設定為主題。 這可同時套用資料系結和主題。 甚至可以將來自另一個資料來源的資料設為主題。

區塊圖和資料流程

MRTK 主題資料流程

MRTK 主題

主題是一次變更許多 UX 元素視覺美感的能力。 一般而言,指定主題所需的所有資料都是由單一資料來源提供,例如 Scriptable 物件。 您也可以視需要提供主題資料,或根據其用途分割成邏輯群組。

MRTK3 主題

MRTK3 主題與資料系結結合

單一 UX 元素的資料系結和主題可以共存。 任何個別的 UX 元素都可以同時進行主題和資料系結。 在此案例中,典型的流程是使用來自 DataSource 的 datum 來衍生正確的主題索引鍵路徑。 然後,此索引鍵路徑可用來從主題資料來源擷取物件,通常是 ScriptableObject 設定檔,但可能是任何可以解析索引鍵路徑的資料來源。

若要簡化主題和資料系結的設定,您可以建立系結設定檔,這些設定檔會在具現化時由 BindingConfigurator 處理。

  • BindingConfigurator 處理 系結設定檔 ,以判斷預製專案內要設定主題的資產,並將系結的資料元素和可主題專案與 Keypath 產生關聯。 然後,它會將這些 DataConsumers 視覺元素系結至用來參考一或多個 DataSources 中特定資料的正確 Keypaths 選取器,這通常是預製專案本身外部。
  • 主題資料是由 提供, DataSource 其中包含系結設定檔中所識別之每個 Keypath 的資料。
  • ThemeProvider協助程式腳本可讓您輕鬆地使用ScriptableObject作為 DataSource 主題的 。
  • 標準 UX 主題是由 MRTK_UX_ThemeProfile 系結至 DataSourceReflection 中 之 的 ThemeProviderScriptableObject所提供。

主題設定檔資料來源流程圖

內嵌資料來源

內嵌資料來源適用于兩種情況:

  1. 當預製專案的每個實例可能有不同的主題設定,而且需要它自己的個別資料來源時。
  2. 當這個預製專案的所有實例都受到一個常見的保存主題設定檔 (所控管時,例如 ScriptableObject) ,而且可以透過內嵌資料來源提供,如此一來就不需要建立外部相依性。

DataSourceReflection

這可以使用反映將索引鍵路徑對應至欄位、屬性、巢狀類別、陣列、清單或字典,將任何 C# 結構或類別 DataSource 轉換成 。 它可以與 Unity ScriptableObject 或任何其他存在主題資料的 C# 結構或類別相關聯。 包含資料的具現化物件可以在執行時間插入並變更相依性。

  1. 可編寫腳本的物件:適用于跨許多預製專案共用的靜態主題。
  2. 非保存的 C# 結構或類別:適用于主題的動態執行時間修改。

DataSourceJson

如果資料以文字的形式 json 存在,則這會管理與 DOM 的 json 對應索引鍵路徑。 二進位資產可以從 Unity 的資源、 StreamingAssets 或甚至擷取的 URL 擷取。

DataSourceDictionary

當單純的一般清單足以符合需求,以及快速原型設計時,這是簡單的選項。 支援所有主題資產,包括文字、Unity 資產 (例如材質、Sprites 和 Images) 、 ResourcesStreamingAssets,甚至是透過 URL 外部擷取。

Custom

任何實作直接 IDataSource 介面或衍生自 DataSourceBaseDataSourceGOBase 或 的自訂資料來源,都可以用來符合自訂需求。

主題 UXComponents

UXComponents 套件中提供的標準 UXComponents 控制項都設定為支援主題。 預設會關閉,但很容易啟用。

每個控制項通常位於根預製專案的最上層 GameObject 上,都有名為 UXBindingConfigurator 的腳本。 如果啟用此腳本,將會提取所需的資料系結腳本來開啟主題。 請務必同時匯入資料系結和主題套件。

TextMeshPro StyleSheets 上的附注:目前無法使用 StyleSheets 來設定 TextMeshPro 一般 樣式的樣式。 可以使用 TextMeshPro 的預設樣式表單 中包含的任何其他樣式。 這些範例會使用 Body 來解決這項限制。

DataSourceThemeProvider

DataSourceThemeProviderMonoBehaviour 可用來輕鬆地建立 ScriptableObject,其中包含所有主題資產函式做為資料來源的所有參考。 這會在 UXThemingExample 場景中示範。

ThemeSelector

ThemeSelectorMonoBehaviour 可讓您指定並輕鬆地在多個 ScriptableObject 設定檔之間交換。 使用這個範例是讓您輕鬆地在「深色」和「淺色」主題之間切換。 將 ScriptableObjects 新增至 Theme Profiles ,通常是在設計階段。 然後,在執行時間變更 Current Theme 屬性以變更主題。

資料取用者主題

主題處理是由資料取用者完成,特別是繼承自 DataConsumerThemeBase < T > 、DataConsumerTextStyle 和自訂 DataConsumer 類別,任何開發人員都可以實作的自訂 DataConsumer 類別,以增強主題支援。

DataConsumerThemeBase < T > 基類提供邏輯,以使用主要資料來源的整數或索引鍵資料,從次要主題資料庫查閱所需的最終值。 這可藉由將輸入資料對應至主題索引鍵路徑,然後使用該主題索引鍵路徑來擷取最終值來完成。 這可讓任何專案同時系結資料及主題。 例如,假設資料庫中的狀態為 New、Started 和 Done 的狀態欄位,以值 0、1 和 2 表示。 每一個都可以以 Sprite 圖示來表示。 針對資料系結,值從 0 到 2 會用來查閱所需的 Sprite。 使用主題和資料系結時,主題設定檔會指向主題設定檔中三個 Sprite 的正確清單,然後使用從 0 到 2 的值從該清單中選取正確的 Sprite。 這可讓這些圖示的樣式依主題而有所不同。

當執行時間主題和動態資料系結同時使用時,可以在任何 DataConsumerThemeBase 衍生類別中指定 DataConsumerThemeHelper 類別,以在主題變更時通知。

在執行時間交換主題可藉由以相同資料物件模型拓撲中配置的新資料集取代主題資料來源中的資料來完成。 DataSourceReflection 可以搭配 ScriptableObjects 使用,其中每個設定檔都代表主題。 針對所有 MRTK Core UX 控制項,主題設定檔是名為 MRTK_UXComponents_ThemeProfile 的 ScriptableObject。 ThemeProvider.cs 協助程式腳本可讓您輕鬆地使用此或任何 ScriptableObject 設定檔作為資料來源。

在大部分情況下,可以自動偵測將主題套用至動態資料的方法,也可以明確指定。

使用 datum 從主題資料來源中選取正確的專案時,此程式為:

  • 主要資料來源的日期可用來選取或建構正確的 主題索引鍵路徑
  • 主題索引鍵路徑可用來從 DataConsumerThemeHelper 上指定的主題資料來源擷取值
  • 已擷取的主題值會分析為自動偵測正確的擷取方法
  • 然後,使用自動偵測方法擷取正確類型 (的最終資料項目,例如 Material、Sprite 或 Image) 。

資料類型

用來擷取所需物件之 datum 的預期資料類型可以是下列其中一項:

資料類型 描述
AutoDetect 系統會分析資料,並自動偵測正確的解譯。 如需詳細資訊,請參閱下方的「自動偵測資料類型」。
DirectValue datum 必須是所需的 T (類型,例如 Material、Sprite、Image) ,並直接使用。
DirectLookup 用來從本機查閱表格查閱所需值的整數索引或字串索引鍵。
StaticThemedValue 在指定的主題索引鍵路徑上,會從主題資料來源擷取正確類型的靜態主題物件。
ThemeKeypathLookup 整數索引或字串索引鍵可用來查閱所需的主題索引鍵路徑。
ThemeKeypathProperty 字串屬性名稱,將會附加至 Theme 中提供的主題基底索引鍵路徑。
ResourcePath 從 Unity 資源擷取值的資源路徑 (開頭可能是 「resource://」 ) 。
FilePath 擷取 Unity 串流資產的檔案路徑 (開頭可能是 「file://」。) 。

自動偵測資料類型

自動偵測會分析收到的資料,並自動決定擷取方法。 在下表中,T 代表所需的類型,例如 Material、Sprite、Image。 自動偵測可在程式中的兩個位置發生:

  • 在主要 datum 值本身上。
  • 在透過主要資料列擷取的主題值上。
Datum 類型 考量 具有主題協助程式 行為
T n/a Y/N 直接搭配無主題使用
int 任何整數基本類型或 Int32 可剖析字串 以索引的形式傳遞至衍生的 GetObjectByIndex (n) ,以擷取 T 類型的第 N 個物件。
int 任何整數基本類型或 Int32 可剖析字串 從本機查閱擷取第 N 個主題索引鍵路徑,然後透過自動偵測擷取主題物件。
string 格式:「resource://{resourcePath}」 Y/N resourcePath 可用來擷取 Unity 資源
string 格式:「file://{filePath} Y/N filePath 可用來擷取串流資產
string 其他 傳遞為金鑰至衍生的 GetObjectByKey () ,以擷取 T 類型的相符物件。
string 其他 從本機查閱擷取相符主題索引鍵路徑的索引鍵,然後透過自動偵測擷取主題物件。

從包含數值狀態值的資料庫擷取主題狀態圖示的範例:

  1. 資料庫中狀態圖示的索引鍵路徑status.sprite_index。
  2. status.sprite_index的擷取值為 2,表示「已取消」狀態。
  3. N=2 (換句話說,DataConsumerSprite 查閱中的第三個) 專案會設定為 「Status.Icons.Cancelled」。
  4. 這是用來從「主題」資料來源擷取值的索引鍵路徑。
  5. 「Status.Icons.Cancelled」 索引鍵路徑的值是 「resource://Sprites/sprite_cancelled」。
  6. 自動偵測會判斷它應該透過位於 「Resources/Sprites/sprite_cancelled」 的資源擷取圖示

TextMeshPro StyleSheets

主題功能能夠啟用 TMPro 樣式表單。 「TMP 設定」 ScriptableObject 會指定樣式表單預期位於資源中的位置。 這是「預設字型資產 = > 路徑」屬性。

請務必將任何應用程式特定的 StyleSheet 放在 [資源] 的相同子路徑中。 如果您想要以不同的方式加以組織,請務必更新 「TMP 設定」以符合。

讓新的 UX 控制項成為可主題

如果您要開發新的 UX 控制項,則比較容易讓它們成為可進行主題。 就控制項使用材質、Sprite 和其他已由其他 UX 控制項使用的資產而言,通常就是以可探索的方式命名各種遊戲物件。

您可以繼承自 MRTK_UXCore_ThemeProfile 並新增更多可主題欄位,或將控制項指向您自己的 ScriptableObject。 沒有關于所提供的專案有任何作用;ScriptableObject 的組織會決定透過 C# 反映存取個別資料項目所需的索引鍵路徑。

藉由將 BindingConfigurator.cs 腳本新增至新控制項的最上層,您可以接著指定自己的序列化 BindingProfile ScriptableObject。 這會將必要的 GameObject 名稱提供給 KeyPath 對應,以將可主題元素與主題設定檔中提供的資料產生關聯。 此腳本會在執行時間自動新增任何所需的 DataConsumerXXX 元件,以支援您要使用的主題。

開始使用

規格需求

  • Unity 2020.3 LTS 或更新版本
  • TextMeshPro 2.1.4 或更新版本

範例場景

如需第一個步驟,請仔細查看 MRTK 範例套件中各種資料系結範例場景,並查看如何設定各種資料來源 MonoBehaviours。 一般而言,資料系結腳本只需要放在預製專案的最高層級 GameObject 或一組相關的 UX 元素上。

此外,針對大部分的使用案例,預設值會「現成」運作,但公開的屬性可為更進階的案例提供許多彈性。

注意

若要啟用標準 MRTK UX 元件的主題, MRTK_UX_DATABINDING_THEMING_ENABLED 符號必須在播放機設定中定義。 此符號可確保不需要主題時,零效能影響。

Assets/DataBinding Example/Scenes/DataBindingExamples.scene

此場景示範各種變數資料案例。 只要載入場景並播放即可。 請注意下列幾點事項:

  • TextMeshPro 元件的 [文字輸入] 欄位包含如下所示的變數:{{ firstName }}。 這些標記會直接作為本機索引鍵路徑使用。

  • Sprite 和文字的遊戲物件有某種形式的資料取用者元件,可管理接收資料和更新檢視。

  • 單一資料取用者可以由相同類型的多個元件共用,方法是放在 GO 階層中較高的位置。

  • 只要資料取用者位於 GO 階層中的相同遊戲物件或更新版本,就可以找到自己的資料來源。

  • 父遊戲物件具有資料來源元件,可提供所有子遊戲物件的資料,這些子遊戲物件會呈現一組相關的變數資訊。

  • 集合資料取用者會指定預製專案,其本身包含資料取用者,該取用者將用來填入該預製專案與變數資料。

Assets/UX 主題範例/場景/AudioTheming

本範例會使用主題來切換一組的 AudioClips,以在一組適用于「檔案」和一個「Xylophone」之間切換。

Assets/UX 主題範例/Scenes/BatteryLevelExample

本範例結合主題和資料系結,以將電池計量顯示為數值和圖示。 主題可用來選取「充電」和「未充電」主題。 其設計目的是要符合下列目標:

  • 所有視覺資產都可以存在於做為主題設定檔的單 ScriptableObject 一中。
  • 「充電」狀態的 Sprite 數目可能與「未充電」狀態的數目不同。
  • 將報告電池計量對應至特定 Sprite 的演算法可以是非線性的,而且「充電」與「未充電」狀態之間的差異。
  • 所有視覺資產都可以存在於做為主題設定檔的單 ScriptableObject 一中。
  • 充電狀態的 Sprite 數目可能與未充電狀態的數目不同。
  • 用來對應報告電池計量的演算法,Sprite 可以是非線性的,而且在充電與未充電狀態之間有所差異。

注意

此示範的結構不是結合主題和資料系結的良好範例。 在生產應用程式中,用於適當區隔模型和檢視,實際電池狀態 (層級和充電) 會提供于與 Sprite 本身的資源定位器不同的資料來源中。

Assets/UX 主題範例/場景/UXThemingExample

此範例示範如何變更整個應用程式的主題,並示範如何使用 DataSourceGODictionary 做為資料來源來管理要顯示在 UX 中的各種文字內容。 在更完整的案例中,其他更有彈性的資料來源類型可能會提供所需的彈性,例如 DataSourceReflectionDataSourceGOJson

第一個資料系結專案

以下是協助您快速開始使用的簡單範例:

  1. 建立新的場景。
  2. 在 [Mixed Reality工具組] 功能表上,選取 [新增至場景並設定] 選項。
  3. 建立空的遊戲物件,並將其重新命名為「資料系結」。新增 DataSourceJsonTest 元件。
  4. 在偵測器中,將 URL 變更為: https://www.boredapi.com/api/activity
  5. 將 UI - Text - > TextMeshPro 物件新增至資料系結遊戲物件。 它會新增畫布,然後新增「文字 (TMP) 」物件。
  6. 選取 [文字] (TMP) 物件,然後在 [偵測器] 中,將 [文字輸入] 變更為:

{{ activity }}. It's {{ type }}.

  1. 選取 Canvas 物件,並將資料取用者文字元件新增至其中。
  2. 執行專案。 每 15 秒會顯示不同的活動。

恭喜! 您已使用 MRTK 建立第一個資料系結專案!

撰寫新的資料來源

資料來源會將資料提供給一或多個資料取用者。 其資料可以是任何專案:以演算法方式產生、在 RAM 中、磁片上,或從中央資料庫擷取。

所有資料來源都必須提供 IDataSource 介面。 某些基本功能是在稱為 DataSourceBase 的基類中提供。 您最有可能想要衍生自這個類別,以新增您所需的特定資料管理功能。

若要將資料來源當做元件卸載至遊戲物件,另一個基底物件存在,其中 DataSourceGOBase GO 代表 GameObject。 這是 MonoBehavior,可卸載至 GameObject 作為元件。 這是一種精簡 Proxy,其設計目的是將工作委派給非 Unity 特定的核心資料來源。

資料來源可能會公開在 Unity 編輯器中運算元據的能力。 如果是這種情況,衍生類別可以包含所有資料來源邏輯,也可以利用「庫存」資料來源,但也新增 Inspector 欄位或其他設定資料的方法。

撰寫新的資料取用者

資料取用者會在資料變更後取得通知,然後更新使用者體驗的某些層面,例如 TextMeshPro 元件中顯示的文字。

所有資料取用者都必須提供 IDataConsumer 介面。 某些基本功能是在稱為 DataConsumerGOBase 的基類中提供,其中 GO 代表 GameObject。

資料取用者的大部分工作是接受新的資料,然後準備它以供簡報使用。 這可能就像選取正確的預製專案一樣簡單,也可能表示從雲端服務擷取更多資料,例如內容管理系統。

撰寫資料收集專案放置器

資料收集專案放置器負責管理集合目前可見的部分,以及如何呈現該可見的集合,無論是小型靜態清單還是大型的百萬筆記錄資料庫。

所有專案放置器都必須提供 IDataCollectionItemPlacer 介面。 某些基本功能是在稱為 DataColletionItemPlacerGOBase 的基類中提供。 所有專案放置器都應該衍生自這個類別。

已知限制和遺漏功能

  • 尚未與 Unity 的畫布型控制項和可捲動清單整合。
  • 尚未實作 .NET INotifyPropertyChanged 的整合。
  • 從Flickr 擷取影像和 trymrtk.com 的範例場景無法在 HoloLens 上運作,因為較新版本的 Unity 中有 HTTPS SSL Bug。
  • 其他效能微調。
  • 此版本著重于資料呈現,而非資料擷取。 MRTK UX 控制項尚未連線,以在 中 DataSource 設定狀態。
  • 清單資料的動態變更會完整重新整理整個清單,而不是以累加方式更新。
  • 尚未實作資料操作管線
  • 尚未完全支援在平板上填入所有 UX 元件。
  • DataSourceJson 節點應該實 IDataNode 作介面,以便與 DataSourceObjects 互通。