共用方式為


數據系結和主題架構 - MRTK3

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

什麼是數據系結

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

熱門的數據系結架構:

  • Delphi
  • Windows Presentation Framework (WPF .NET)
  • Windows Forms \(英文\)
  • Angular
  • Backbond
  • JavaFX 系結

Windows Presentation Framework 數據系結區塊圖

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


MRTK 對等區塊圖

MRTK 對等區塊圖


設計目標

  • 跨平臺--部署任何地方
  • 支持數據源的任何組織結構和來源
  • 容易整合到現有或綠地程式代碼基底
  • 設計工具與開發人員友好
  • 可以在應用程式生命週期期間隨時啟用/停用
  • 支持真實世界、企業案例--後端 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,這會自動轉換成集合中特定專案的完全解析索引鍵路徑。 未與集合建立關聯時,這些可以直接對應至數據源中的 datum,也可以先透過 Keypath Mapper 來修改。
  • 完全解析的 Keypath - 對應至數據源中一個特定物件的完整絕對索引鍵路徑。 對於集合中的專案,這是一個集合實體的完整解析索引鍵路徑,以及該集合實體之一個數據元素的相對 (local) 索引鍵路徑的組合。

  • Keypath Mapper - 本機 keypaths 與數據源域名之間的選擇性命名空間對應程式(例如“link” <-> “URL” )。

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

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

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

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

  • 預測性預先擷取 - 預先擷取 數據和填入可能很快就會透過捲動/分頁方式看到之專案的收集預製專案。

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

重要概念

資料來源

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

數據源提供者

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

數據源提供者單一

DataSourceProviderSingleton MonoBehaviour 可讓您指定數據源,即使數據源不在想要接聽它的 DataConsumers 中,仍可自動探索。 只要將任何位置放在 DataSourceProviderSingleton場景中,並以數據取用者所要探索的任何數據源填 Data Sources 入 屬性。 或者,數據取用者會逐步引導其父系尋找適當的數據源,這表示您可以將數據源放在這些數據取用者父鏈中的任何位置提供所需數據的數據源。

索引鍵路徑 (字串)

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

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

範例索引鍵路徑:

  • 溫度
  • contacts[10].firstName
  • 連絡人
  • contacts[10].addresses[3].city
  • [10].title
  • kingdom.animal.哺乳動物.aardvark.diet.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 處理系 結配置檔 ,以判斷要設定主題之預製專案內的資產,並將系結的數據元素和可主題元素與 Keypaths 產生關聯。 然後,它會新增適當的 DataConsumers 方法,將這些視覺元素系結至正確的Keypaths選取器,這些選取器將用來參考一或多個 DataSources中的特定數據,這些數據通常位於預製專案本身外部。
  • 主題數據是由 , DataSource 其中包含系結配置檔中所識別之每個 Keypath 的數據。
  • ThemeProvider協助程式腳本可讓您輕鬆地使用 ScriptableObject 做為DataSource主題。
  • 標準 UX 主題是由MRTK_UX_ThemeProfile系結至 DataSourceReflectionThemeProvider之 的 ScriptableObject 所提供。

主題配置檔數據源流程圖

內嵌數據源

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

  1. 當預製專案的每個實例可能有不同的主題設定,而且需要自己的個別數據源時。
  2. 當這個預製專案的所有實例都由一個常見的持續性主題配置檔所控管時(例如 ScriptableObject),而且可以透過內嵌數據源提供,讓沒有任何外部相依性可建立。

DataSourceReflection

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

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

DataSourceJson

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

DataSourceDictionary

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

自訂

任何實作簡單 IDataSource 介面或衍生自 DataSourceBase DataSourceGOBase 或的自定義數據源,都可以用來符合自定義需求。

主題 UXComponents

UXComponents 套件中提供的標準 UXComponents 控件全都設定為支持主題。 默認會關閉,但很容易啟用。

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

TextMeshPro StyleSheets 上的附注:目前無法使用 StyleSheets 來設定 TextMeshPro Normal 樣式的樣式。 您可以使用 TextMeshPro 的預設樣式表單 中包含的任何其他樣式。 這些範例會使用 Body 來解決此問題。

DataSourceThemeProvider

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

ThemeSelector

ThemeSelector MonoBehaviour 可讓您指定並輕鬆地在多個 ScriptableObject 配置檔之間交換。 其中一個範例是讓您輕鬆地在「深色」和「淺色」主題之間切換。 將 ScriptableObjects 新增至 Theme Profiles,通常是在設計時間。 然後,在運行時間變更 Current Theme 屬性以變更主題。

數據取用者主題

主題是由數據取用者完成,特別是繼承自 DataConsumerThemeBase<T>、DataConsumerTextStyle 和自定義 DataConsumer 類別的自定義 DataConsumer 類別,任何開發人員都可以實作這些類別來增強主題支援。

DataConsumerThemeBase<T> 基類提供邏輯,以使用來自主要數據源的整數或索引鍵數據,從次要主題資料庫查閱所需的最終值。 這可藉由將輸入數據對應至主題索引鍵路徑,然後使用該主題索引鍵路徑來擷取最終值來完成。 這可讓任何項目同時同時系結數據及主題。 例如,想像資料庫中的狀態欄位,其狀態為 [新增]、[已啟動] 和 [完成],以值 0、1 和 2 表示。 每一個都可以由Sprite圖示來表示。 對於數據系結,會使用 0 到 2 的值來查閱所需的 Sprite。 使用主題和數據系結時,主題配置檔會指向主題配置檔中三個 Sprite 的正確清單,然後使用 0 到 2 的值從該列表中選取正確的 Sprite。 這可讓這些圖示的樣式因主題而異。

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

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

在大部分情況下,可以自動偵測主題至動態數據的方法,也可以明確指定。

當 datum 用來從主題數據源中選取正確的專案時,程式為:

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

資料類型

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

資料類型 描述
自動偵測... 會分析 datum,並自動偵測到正確的解譯。 如需詳細資訊,請參閱下面的。
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 可剖析字串 No 當做索引傳遞至衍生的 GetObjectByIndex(n) 以擷取 T 類型的第 N 個物件。
int 任何整數基本類型或 Int32 可剖析字串 Yes 從本機查閱擷取第 N 個主題索引鍵路徑,然後透過自動偵測擷取主題物件。
字串 格式:“resource://{resourcePath}” Y/N resourcePath 用來擷取 Unity 資源
字串 格式:“file://{filePath} Y/N filePath 用來擷取串流資產
字串 其他 No 當做密鑰傳遞至衍生的 GetObjectByKey() 以擷取 T 類型的相符物件。
字串 其他 Yes 從本機查閱擷取相符主題索引鍵路徑的索引鍵,然後透過自動偵測擷取主題物件。

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

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

TextMeshPro StyleSheets

主題可以啟用TMPro樣式表單。 “TMP 設定” ScriptableObject 會指定樣式表單預期在 Resources 中的位置。 這是 「預設字型資產 => 路徑」屬性。

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

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

如果您正在開發新的UX控制件,則讓這些控件變得相當容易。 就控件使用其他 UX 控制件已使用材質、Sprite 和其他資產的程度而言,通常以可探索的方式命名各種遊戲物件。

您可以繼承自 MRTK_UXCore_ThemeProfile ,並新增更多可主題欄位,或將控件指向您自己的 ScriptableObject。 提供的人沒有什麼神奇的:ScriptableObject 的組織會透過 C# 反映來判斷存取個別數據項所需的索引鍵路徑。

藉由將BindingConfigurator.cs腳本新增至新控件的最上層,您就可以指定自己的串行化 BindingProfile ScriptableObject。 這會將必要的 GameObject 名稱提供給 KeyPath 對應,以便將可主題元素與主題配置檔中提供的數據產生關聯。 此腳本會自動在運行時間新增任何必要的 DataConsumerXXX 元件,以支援您想要使用主題。

快速入門

需求

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

範例場景

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

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

注意

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

Assets/DataBinding Example/Scenes/DataBindingExamples.scene

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

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

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

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

  • 只要數據取用者位於 GO 階層中的相同遊戲物件或更高層級,就可以找到自己的數據源。

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

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

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

這個範例會使用主題,在一組適用於 Piano 和 Xylophone 的一個之間切換 AudioClips。

Assets/UX 主題範例/Scenes/BatteryLevelExample

本範例結合主題和數據系結,將電池電量同時顯示為數值和圖示。 主題可用來在「收費」和「不收費」主題之間選取。 其設計目的是要符合下列目標:

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

注意

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

Assets/UX 主題範例/Scenes/UXThemingExample

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

第一個數據系結專案

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

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

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