歡迎來到 MRTK3 資料綁定與主題框架。 此框架旨在輕鬆創建可動態填充與更新的視覺元素,這些元素可由來自一個或多個資料來源提供。
什麼是資料綁定
資料綁定是建立應用程式 UX (視圖) 與模型) 呈現資料之間的連結 (過程。 假設綁定設定正確且資料提供適當的通知;當資料的值改變時,綁定到資料的元素會自動改變。
熱門的資料綁定框架:
- 德爾斐
- Windows 呈現框架 (WPF .NET)
- Windows Forms
- Angular
- 反綁
- JavaFX 綁定
Windows Presentation Framework 資料綁定方塊圖
欲了解更多資訊,請參閱 資料綁定概述 - WPF.NET
MRTK 等效方塊圖
設計目標
- 跨平台——部署到任何地方
- 支持任何組織結構及資料來源來源
- 容易整合到現有或新開發的程式碼庫中
- Designer 與開發者友善
- 可在應用程式生命週期的任何時候啟用或停用
- 支援真實世界的企業情境——後端資料庫、複雜的 UX 預製模板
- 易於應用於現有非MRTK使用者體驗元件及新穎的視覺元素
- 綁定任何資料類型,包括精靈、圖片、材質、動畫和音訊片段
- 在不動用現有程式碼基礎的情況下,很容易強化功能
- 有效利用 CPU、記憶體、GC 與幀時間
- 輕鬆整合多種本地或後端資料來源
- 任何同時結合嵌入式、執行狀態與後端資料來源的組合
- 有效處理任何規模的集合以呈現清單
- 主題與資料綁定結合,針對可主題動態資料元素
- 在呈現前,以開放式方式驗證並操作變數資料
- 對其他MRTK功能的依賴極少
- 相容於 MRTK v2 與 MRTK3
- 很容易用白標或貼品牌到庫存資產上,幾乎不費力
主要特色
- 開放式資料來源支援任何持久化、遠端或 RAM 資料策略。
- 開放式資料使用者支援任何 UX 綁定與主題需求。
- 資料來源與消費者之間的自動發現簡化了連線。
- 可選的綁定設定檔自動設定
- 解耦資料模型與視圖支援 MVC 與 MVVM 模式。
- 虛擬化典藏,透過分頁與捲動進行導覽。
- 預測性預取收集項目,方便順暢的清單導航。
- 集合物件可以被合併並重複使用,以減少 GC。
- 能映射資料差異並檢視鍵路徑命名空間。
目前功能
1. 透過資料使用者視覺化變量資料
目前支援:
- TextMeshPro 與 TextMesh 文字
- 文字樣式表 (主題與無障礙)
- 精靈貼圖
- 布林觸發器
- 四邊形紋理
- 字型圖示
- 集合:任意大小的清單,包含包含可變資料的預製件
- 任何其他支援 IDataConsumer 介面的消費者 (直接或透過基底類別衍生)
2. 利用各種資料來源提供可變資料:
- JSON 文字 (直接或透過 URL 取取)
- 變數資料元素字典
- 物件 - 基於節點的結構化資料
- 任何 C# 物件的反射
- 程式化修改的資料
- 任何其他支援 IDataSource 介面的方法
3. 清單項目擺放器,用以管理清單的視覺呈現
4. 列表分頁、捲動與虛擬化
- 資料只有在可見或進行中時才會被擷取
- 支援任意大型後端資料集
- 取回是多幀負載平衡的
5. 列出預製模型池
- 預製件會被重複使用並重新填充,以減少總承包和實例化時間。
6. 在執行時動態地將主題套用於元素
路線圖功能
除了現有功能外,更多功能的首要優先事項包括:
1. 資料操作管線
- 資料端與視圖端值的轉換
- 本地化 (與 Unity 本地化無縫整合)
- 格式設定
- 驗證
2. 預測式清單項目預取,讓捲動/分頁更快更順暢
3. 更多資料消費者
- 在元件上設定任意公共屬性
- 設定勾選框開啟/關閉狀態
- 設定滑桿值
- 在群組中設定一個無線電按鈕
- 個別材質屬性,例如設定顏色
4. 主題設計
- 即使在未執行應用程式時,也請在編輯器中查看套用的主題
- 更新預製件以反映套用的主題,使其成為預設主題
- 主題/風格繼承
術語
- 資料來源 - 任何資料提供者,無論是執行時狀態、本地持久化,或是從伺服器擷取的資料。
- 資料來源提供者 - 一個簡單的 MonoBehaviour,提供存取可能未在 Unity 場景圖中暴露的資料來源。
- 資料來源類型 - 為資料來源分配的唯一名稱,讓資料消費者能依名稱指定其想要的資料來源 () 。
- 資料消費者(Data Sumer) -任何想要對資料變更採取行動的資料消費者,通常是視覺元素,但並非必須。 舉例來說,它的目的可以是根據資料值的變動觸發動作。
- 資料控制器 - 一種用當前關聯資料綁定值作為參數來呼叫動作的機制。
- Keypath - 一個資料選擇器,用於參考資料來源中的特定物件。 目前的實作方式是參考 JSON 資料存取器來解讀任何巢狀的映射、清單與原子元素組合。
- 本地金鑰路徑 -一種資料消費者端的金鑰路徑,可永久嵌入可重複使用的預製件中。 透過解析集合實體與鍵路徑映射器,會自動轉換為集合中特定項目的完整解析鍵路徑。 當不與集合相關聯時,這些資料可以直接對應到資料來源中的資料,或透過 Keypath Mapper 進行對應。
完全解析的金鑰路徑 - 一個完整且絕對的金鑰路徑,映射到資料來源中的特定物件。 對於集合中的項目,是集合實體完全解析的金鑰路徑與該集合實體中一個資料元素相對 (局部) 金鑰路徑的組合。
Keypath Mapper - 本地鍵路徑與資料來源欄位名稱之間的可選命名空間映射器, (例如「link」 <-> 「URL」) 。
主題 ——一個提供各種資產與風格的資料來源,以達成特定的視覺美學。
物品擺放器 - 一個負責將可見物品放入場景的 DataConsumerCollection 夥伴。
資料物件池 - 實例化的待命預製件,準備填充資料以進行低GC清單導航。
清單虛擬化 - 能夠填充、呈現及瀏覽任意大小的清單。
預測預取 - 預先取資料並填充可能透過捲動/分頁快速看到的項目的集合預製件。
- 預測預取 - 預先取資料並填充可能透過捲動/分頁看到的項目的集合預製件。
關鍵概念
資料來源
資料來源是任何可透過資料使用者填充資料視圖的任意類型) ( 的管理資料集。 資料來源所管理的資料可以是靜態的,也可以是動態的。 任何資料項目的變更都會回報給註冊接收變更通知的資料使用者。
資料來源提供者
一個簡單的介面,僅有單一方法來擷取資料來源,設計用來讓 MonoBehavior 腳本元件能被資料使用者元件自動發現遊戲物件階層中的元件。 不需要直接在遊戲物件本身實作資料來源。 當現有的 MonoBehaviour 必須從另一個類別衍生,而多重繼承阻止從 DataSourceGOBase 衍生時,這非常有用。 它也允許更多程式碼沒有 Unity 相依。
資料來源供應商 Singleton
DataSourceProviderSingleton MonoBehaviour 允許指定一個資料來源,即使它不在想要監聽它的 DataConsumers 同一 GameObject 階層結構中,也能自動被發現。 將該 DataSourceProviderSingleton場景中任意位置放入,並用資料使用者發現的任何資料來源填充該 Data Sources 物業。 或者,資料使用者會跟著父母一起尋找合適的資料來源,這表示你可以在這些資料使用者的父鏈中任意放置提供所需資料的資料來源。
鍵徑 (串)
關鍵路徑是唯一識別資料來源中任何資訊的機制。
雖然金鑰路徑可以是每個資料項目的唯一識別碼,但目前實作使用邏輯使用者可讀的指定符,指示感興趣資料相對於整個結構化資料集的導航位置。 它是以 JavaScript 的清單、字典和原語概念為藍本。 金鑰路徑是語法正確的 JavaScript 語句,用於存取可用 JSON 表示的資料。 此方法的優點在於它與 JSON 和 XML 兩者都高度對應,這兩者是從後端服務傳輸資訊最常用的方式。
範例金鑰路徑:
- 溫度
- 聯絡人[10]。名字
- 連絡人
- 聯絡人[10].地址[3].城市
- [10]。標題
- 界、動物、哺乳動物、土豚、飲食、食物種類、白蟻
鑑於金鑰路徑是任意字串且無需分類法,實際的資料指定符可以是描述要檢索資料的任何方法。 XML 的 XPath 是一個可行的金鑰路徑架構範例,適用於資料來源。 只要資料使用者提供的金鑰路徑與資料來源預期的金鑰路徑一致,一切運作正常。 此外,金鑰路徑映射器可實作用於不同結構間的轉換。
解析金鑰路徑
解析金鑰路徑意味著將兩個金鑰路徑結合:
- 絕對鍵路徑描述如何存取較大資料集中特定子集,例如多個條目列表中的一個條目。
- 部分 (相對的) 鍵路徑,代表該列表或映射項目中的特定基準。
這使得資料的子集能夠被處理得無關於其實際存在於更大資料集階層的哪個位置。 此功能最關鍵的用途是描述清單中單一條目的資料,而不用擔心目前實例在引用哪個條目。
由於「完全解析」的金鑰路徑由資料來源產生並消耗,且很少被資料消費者或其他外部元件修改,因此它可以有任何對資料來源有意義的結構。 例如,如果有一個預製件可以顯示一張照片的清單條目及其標題、拍攝日期和其他屬性,預製件中的本地金鑰路徑可能如下:
- 「photo_url」
- 「標題」
- 「date_taken」
- 「描述」
列表中一個預製項目的完整解析金鑰路徑可能如下:
- 「F3CB1906-D8B3-489D-9F74-725E5542B55D/photo_url」
- 「F3CB1906-D8B3-489d-9F74-725E5542B55D/標題」
- 「F3CB1906-D8B3-489D-9F74-725E5542B55D/date_taken」
- 「F3CB1906-D8B3-489D-9F74-725E5542B55D/說明」
Key Path Mapper (IDataKeyPathMapper)
金鑰路徑映射器允許資料來源與資料使用者使用不同的命名空間與慣例來管理金鑰路徑,同時仍能協同運作。
常用元素的預製件,例如顯示聯絡資訊的平板,可以包含由資料使用者管理的變數欄位。 為了利用預製件中任何變數面向的識別碼,需要一種方式來對應到資料來源中正確數據的識別碼,該資料在每次使用預製件時,決定該變數元素的內容。 金鑰路徑映射器讓這一切成為可能。
預製件可用於不同的資料來源,這些資料儲存在不同的組織架構中,並使用欄位名稱。 若要在每個資料來源中使用模板預製件,Key Path Mapper 可以解決資料組織方式上的差異。
Data Consumer (IDataConsumer)
一個懂得如何接收資料來源管理的資訊,並利用這些資料來填充資料檢視的物件。
資料使用者可以向資料來源註冊,以收到資料集中指定金鑰路徑上存在的任何資料項目變更通知。 每當資料中指定的變更 (或懷疑有變更) 時,資料消費者 () 都會收到通知。
資料消費者收集
資料消費者集合還能額外管理一串相似項目的清單。 這個清單可以是由資料來源管理的整個資料集,或只是子集。 通常列表中每個項目的資料都包含類似類型的資訊,但這並非必要條件。 資料來源與資料消費者可支援巢狀清單,例如在聯絡人清單中,包含與每張照片相關的關鍵字清單。 關鍵字的鍵路徑相對於照片,照片的鍵路徑相對於人物,而人物的鍵路徑則相對於最近的父列表或資料集的根。
在處理集合時,集合中特定項目的正確解析金鑰路徑會分配給每個在預製件中發現的資料使用者,該預製件為每個集合項目實例化。 它用來完整解析該預製件內任何相對 (本地) 視圖資料的金鑰路徑。
資料收集項目擺放器
收集資料的消費者需要一種方式,讓使用者體驗中出現重複出現的視覺元素清單,例如可捲動的產品清單、照片或聯絡人中可能出現的內容。 這是透過將項目定位器分配給收藏資料使用者來實現的。 這個項目放置器是知道如何請求清單項目、接受填充變數資料的預製件,然後將它們呈現給使用者的邏輯,通常是透過將它們插入由 UX 配置元件管理的清單中。
佈景主題
主題設計會利用所有資料來源和資料使用者的管道。 無論是靜態還是動態綁定於其他資料來源的 GameObjects 階層,都可以為任何階層設定主題。 這樣的結果允許資料綁定與主題結合使用。 甚至可以將來自其他資料來源的資料設定主題。
方塊圖與資料流程
MRTK 主題
主題化是指能同時改變多個 UX 元素的視覺美學。 通常,指定主題所需的所有資料都由單一資料來源提供,例如可腳本物件(Scriptable Object)。 也可以根據需求提供主題資料,或根據其用途分成邏輯群組。
MRTK3 主題結合資料綁定
資料綁定與主題設計可以共存於單一使用者體驗元素。 任何單一的使用者體驗元素都可以同時具備主題與資料綁定。 在這種情況下,典型流程是利用來自資料來源的資料來推導正確的主題金鑰路徑。 接著,這個金鑰路徑用來從主題資料來源(Theme Data Source)中擷取物件,通常是 ScriptableObject 設定檔,但也可能是任何能解析金鑰路徑的資料來源。
為了簡化主題設定與資料綁定,可以在實例化時由 BindingConfigurator 處理的綁定設定檔。
- A
BindingConfigurator處理綁定設定檔 以決定預製件中將要設定主題的資產,並將綁定的資料元素與主題元素與鍵路徑關聯。 接著,還要DataConsumers將這些視覺元素綁定到正確的鍵徑選擇器,這些選擇器用於參考一個或多個DataSources特定資料,這些資料通常位於預製器本身之外。 - 主題資料由
DataSource包含綁定設定檔中每個鍵路徑的資料提供。 -
ThemeProvider輔助腳本讓使用 ScriptableObjectDataSource作為主題設定變得簡單。 - 標準的 UX 主題由
MRTK_UX_ThemeProfile綁定在DataSourceReflectiona 中的ThemeProviderScriptableObject 提供。
嵌入式資料來源
嵌入式資料來源適合兩種情況:
- 當每個預製實例可能有不同的主題設定,且需要各自獨立的資料來源時。
- 當所有預製件實例都由一個共同的持久主題設定檔 (例如ScriptableObject) ,且可透過嵌入資料來源提供,無需建立外部相依關係。
DataSourceReflection
這可以透過反射將鍵路徑映射到欄位、屬性、巢狀類別、陣列、清單或字典,將任何 C# 結構體或類別轉為 a DataSource 。 它可以與 Unity ScriptableObject 或其他有主題資料的 C# 結構體或類別相關聯。 包含資料的實例化物件可在執行時透過依賴注入與變更。
- 可腳本物件:適用於多個預製件間共享的靜態主題。
- 非持久化的 C# 結構體或類別:用於主題的動態執行修改。
DataSourceJson
如果資料是以 json 文字形式存在,則是透過將鍵路徑映射到 json DOM 來管理。 二進位資產可以從 Unity 的資源、 StreamingAssets 或甚至取用的 URL 中取得。
DataSource字典
當純平面清單足夠滿足需求,且適合快速原型製作時,這是一個簡單的選擇。 支援所有主題資產,包括文字、Unity 資產 (例如材質、精靈與圖片) 、 資源、 串流資產,甚至可透過 URL 外部擷取。
自訂
任何實IDataSource作簡單介面或源自DataSourceBaseDataSourceGOBase或可用於滿足客製化需求的自訂資料來源。
主題 UXComponents
UXComponents 套件中提供的標準 UXComponents 控制項皆已設定為支援主題設定。 預設是關閉的,但很容易啟用。
每個控制項通常位於根預製件的最頂端 GameObject 上,都有一個名為 UXBindingConfigurator 的腳本。 如果啟用這個腳本,會拉入所需的資料綁定腳本來啟用主題設定。 記得也要匯入資料綁定與主題套件。
關於 TextMeshPro 樣式表的說明:目前無法用樣式表來樣式化 TextMeshPro 的法線 樣式。 TextMeshPro 預設樣式表 中包含的其他樣式都可以使用。 範例中用 身體 來繞過這個限制。
DataSourceThemeProvider
DataSourceThemeProvider MonoBehaviour 可以輕鬆地讓包含所有主題資產參考的 ScriptableObject 作為資料來源來運作。 這在 UXThemingExample 場景中有所展示。
主題選擇器
ThemeSelector MonoBehaviour 使得能夠指定並輕鬆切換多個 ScriptableObject 設定檔。 舉例來說,可以方便在「黑暗」和「淺色」主題之間切換。 通常在設計時將 ScriptableObjects 加入 Theme Profiles。 接著在執行時,改變 Current Theme 屬性以改變主題。
資料消費者主題
主題設定由資料消費者負責,特別是繼承自 DataConsumerThemeBase<T>、DataConsumerTextStyle 及任何開發者都能實作的自訂 DataConsumer 類別,以強化主題支援。
DataConsumerThemeBase<T> 基底類別提供邏輯,利用主要資料來源的整數或鍵基準,從次要主題資料庫查詢所需的最終值。 這是透過將輸入資料映射到主題鍵路徑,然後利用該主題鍵路徑取得最終值來實現的。 這使得任何元素都能同時具備資料綁定與主題。 舉例來說,想像資料庫中的一個狀態欄位,狀態為「新建」、「開始」和「完成」,分別以值 0、1 和 2 表示,每個狀態都以精靈圖示表示。 在資料綁定時,會使用0到2的值來查找所需的精靈。 透過主題與資料綁定,主題設定檔會指向主題設定檔中正確的三個精靈清單,然後利用 0 到 2 的值從該列表中選擇正確的精靈。 這使得這些圖示的造型能依主題有所不同。
當執行時主題與動態資料綁定同時使用時,可以在任何由 DataConsumerThemeBase 衍生的類別中指定 DataConsumerThemeHelper 類別,以通知主題變更。
執行時交換主題是透過將主題資料來源的資料替換為以相同資料物件模型拓撲排列的新資料集來完成。 DataSourceReflection 可與 ScriptableObjects 搭配使用,每個設定檔代表一個主題。 對於所有 MRTK Core UX 控制項,主題設定檔是一個名為 MRTK_UXComponents_ThemeProfile 的 ScriptableObject。 ThemeProvider.cs 輔助腳本讓你可以輕鬆使用這個或任何 ScriptableObject 設定檔作為資料來源。
在大多數情況下,將主題套用到動態資料的方法可以自動偵測,或是明確指定。
當基準面用於從主題資料來源中選擇正確項目時,流程如下:
- 主要資料來源的基準資料會用來選擇或建構正確的 主題鍵路徑
- 主題鍵路徑用於從 DataConsumerThemeHelper 指定的主題資料來源取得值
- 擷取主題值會被分析,以自動偵測正確的擷取方法
- 最終正確類型的資料項目 (例如材質、精靈或影像) ,然後會使用自動偵測方法檢索。
資料類型
用於檢索目標物件的基準資料類型,預期可為以下其中一種:
| 資料類型 | 描述 |
|---|---|
| 自動偵測 | 資料會被分析,並自動偵測到正確的解讀。 更多資訊請參見「自動偵測資料型別」。 |
| 直接價值 | 資料預期為期望的 T 類型, (例如材質、精靈、影像) ,並直接使用。 |
| 直接查詢 | 一個積分索引鍵或字串鍵,用於從本地查找表中查詢所需值。 |
| 靜態主題值 | 正確類型的靜態主題物件會從指定的主題金鑰路徑的主題資料來源中取得。 |
| 主題鍵路徑查詢 | 積分索引鍵或字串鍵用於查找所需的主題鍵路徑。 |
| 主題KeypathProperty(主題關鍵路徑屬性) | 在主題基底鍵路徑後附加一個字串屬性名稱。 |
| 資源路徑 | 從 Unity 資源 (取值的資源路徑可以以「resource://」) 開頭。 |
| FilePath | 取用 Unity 串流資產的檔案路徑 (可能以「file://」開頭 ) 。 |
自動偵測資料型別
自動偵測會分析接收到的資料並自動決定檢索方法。 在表格中,T 代表所需的類型,如材質(Material)、精靈(Sprite)、影像(Image)。 自動偵測可在兩個階段發生:
- 以主基準值本身為例。
- 根據主基準面取得的主題值。
| 基準型 | 考量 | 有主題輔助 | 行為 |
|---|---|---|---|
| T | 不適用 | Y/N | 直接使用,無需主題 |
| int | 任何整數原始碼或 Int32 解析字串 | 否 | 作為索引傳遞給衍生的 GetObjectByIndex (n) 以取得第 N 個型別 T 的物件。 |
| int | 任何整數原始碼或 Int32 解析字串 | 是 | 索引以從本地查詢取得第 N 個主題金鑰路徑,然後透過自動偵測取得主題物件。 |
| 字串 | 格式:「resource://{resourcePath}」 | Y/N | resourcePath 用於擷取 Unity 資源 |
| 字串 | 格式:「file://{filePath} | Y/N | filePath 用於擷取串流資產 |
| 字串 | 其他 | 否 | 作為金鑰傳遞給衍生的 GetObjectByKey () 以取得型別為 T 的相符物件。 |
| 字串 | 其他 | 是 | 鑰匙用來從本地查詢取得匹配主題的鍵路徑,然後透過自動偵測取得主題物件。 |
從包含數字狀態值的資料庫中擷取主題狀態圖示的範例:
- 資料庫中狀態圖示的鍵路徑為status.sprite_index。
- status.sprite_index 的取回值為 2,表示「已取消」狀態。
- 換句話說,N=2 (,也就是 DataConsumerSprite 查詢中的第三個) 條目被設定為「Status.Icons.Cancelled」。
- 用於從「主題」資料來源取得值的金鑰路徑。
- 「Status.Icons.Cancelled」鍵路徑的值為「resource://Sprites/sprite_cancelled」。
- 自動偵測會判斷應該透過位於「Resources/Sprites/sprite_cancelled」的資源來取得該圖示。
TextMeshPro 樣式表
主題設定可以啟動 TMPro 樣式表。 「TMP 設定」ScriptableObject 決定樣式表應該在資源中的位置。 這是「Default Font Asset => Path」這個屬性。
確保將任何應用程式專屬樣式表放在資源區的同一個子路徑中。 如果你想用不同的方式整理,請確保更新「TMP 設定」以符合。
讓新的 UX 控制項成為主題化
如果你正在開發新的 UX 控制項,讓它們成為主題化相對容易。 如果控制鍵使用材質、精靈圖和其他其他 UX 控制已經用過的資產,通常就是用可被發現的方式命名各種遊戲物件。
你可以繼承 MRTK_UXCore_ThemeProfile 並新增更多可主題欄位,或將控制項指向你自己的 ScriptableObject。 提供的那些並沒有什麼神奇的;ScriptableObject 的組織方式決定透過 C# 反射存取個別資料項目所需的金鑰路徑。
透過在新控制項的頂層加入BindingConfigurator.cs腳本,你就可以指定你自己的序列化 BindingProfile ScriptableObject。 這為 KeyPath 映射提供了必要的 GameObject 名稱,以便將主題元素與主題設定檔中提供的資料關聯起來。 這個腳本會在執行時自動新增任何需要的 DataConsumerXXX 元件,以支援你想使用的主題設定。
快速入門
需求
- Unity 2020.3 LTS 或更新版本
- TextMeshPro 2.1.4 或更新版本
範例場景
第一步,仔細看看 MRTK 範例套件中各種資料綁定範例場景,並了解各個資料來源的 MonoBehaviour 是如何配置的。 一般而言,資料綁定腳本只需放置在預製件或相關 UX 元素的最高層級 GameObject 上即可。
此外,大多數使用情境中預設值「開箱即用」,但外露屬性為進階情況提供彈性。
注意事項
要啟用標準 MRTK UX 元件的主題,必須在玩家設定中定義該 MRTK_UX_DATABINDING_THEMING_ENABLED 符號。 這個符號確保在不需要主題時,效能完全不受影響。
Assets/DataBinding 範例/Scenes/DataBindingExamples.scene
這個場景展示了各種可變的數據情境。 載入場景並播放。 有幾點需要注意:
TextMeshPro 元件的 Text Input 欄位包含如下變數:{{ firstName }}。 這些標記直接用作本地金鑰路徑。
精靈與文字的遊戲物件有某種形式的資料消費者元件,負責接收資料與更新檢視。
單一資料消費者可透過在 GO 階層中較高位置,被多個同類型元件共享。
只要資料使用者在同一遊戲物件上或在 GO 階層中更高,就能找到自己的資料來源。
父遊戲物件有一個資料來源元件,提供所有子遊戲物件的資料,這些物件呈現一組相關的變數資訊。
集合資料消費者指定一個預製件,預製件本身包含用來填充該預製件以變量資料的資料。
資產/UX 主題範例/場景/音訊主題
這個例子利用主題切換 AudioClips 在鋼琴和木琴組之間切換。
資產/UX 主題範例/場景/BatteryLevelExample
此範例結合主題與資料綁定,以數值與圖示顯示電池電量。 主題設計用來選擇「充電」或「不充電」主題。 其設計目標是達成以下目標:
- 所有視覺資產都可以存在於一個
ScriptableObject主題設定檔中。 - 「充電中」狀態的精靈數量可能與「未充電」狀態的精靈數量不同。
- 將報告的電池電量映射到特定精靈的演算法可以是非線性的,且會在「充電中」與「未充電」狀態間有所不同。
- 所有視覺資產都可以存在於一個
ScriptableObject主題設定檔中。 - 充電狀態的精靈數量可能與非充電狀態的精靈數量不同。
- 映射報告電池電量的演算法,精靈可是非線性的,且在充電與未充電狀態間存在差異。
注意事項
這個示範的結構並不是主題與資料綁定結合的好範例。 在生產應用中,為了正確分離模型與視圖,實際的電池狀態 (級與充電) 會與精靈本身的資源定位器分開於另一個資料來源中。
資產/UX 主題範例/場景/UXTheming範例
此範例示範如何改變整個應用程式的主題,並展示使用 a DataSourceGODictionary 作為資料來源,管理 UX 中顯示的各種文字內容。 在更全面的情境下,其他更靈活的資料來源類型通常能提供所需的彈性,例如 DataSourceReflection 或 DataSourceGOJson。
第一個資料綁定專案
這裡有一個簡單的範例,幫助你快速開始:
- 建立一個新場景。
- 在 Mixed Reality Toolkit 選單中,選擇「加入場景」並「配置」選項。
- 建立一個空的遊戲物件,並重新命名為「資料綁定」。新增一個 DataSourceJsonTest 元件。
- 在檢查器中,將網址改為提供資料查詢的網站。
- 在 Data Binding 遊戲物件中新增 UI -> Text - TextMeshPro 物件。 它會新增一個畫布,然後再加一個「Text (TMP) 」物件。
- 選取 Text (TMP) 物件,並在檢查器中將文字輸入改為:
{{ activity }}. It's {{ type }}.
- 選擇 Canvas 物件,並新增一個 Data Consumer Text 元件。
- 執行專案。 每15秒會顯示不同的活動。
恭喜你。 你已經用 MRTK 創建了你的第一個資料綁定專案!
撰寫新的資料來源
資料來源向一位或多位資料使用者提供資料。 其資料可以是任何東西:演算法產生的、記憶體中、磁碟上的,或是從中央資料庫取得的。
所有資料來源都必須提供 IDataSource 介面。 部分基本功能包含於一個名為 DataSourceBase. 的基底類別中。 你大概會想從這門課衍生出特定的資料管理功能,以符合你的需求。
為了讓能夠將資料來源作為元件放入遊戲物件,存在另一個基底物件,稱為 DataSourceGOBase GO 代表 GameObject。 這是一個可以作為元件丟到遊戲物件上的 MonoBehavior。 它是一個薄薄的代理,設計用來委派工作給非 Unity 專屬的核心資料來源。
資料來源可能會暴露在 Unity 編輯器中操作資料的能力。 若是如此,衍生類別可包含資料來源邏輯,或使用「庫存」資料來源,同時加入檢查欄位或其他設定資料的方式。
撰寫新的資料消費者
資料使用者會在資料變更時收到通知,並更新使用者體驗的某些面向,例如TextMeshPro 元件中顯示的文字。
所有資料使用者都必須提供 IDataConsumer 介面。 部分基本功能包含在一個稱為 DataConsumerGOBase的基底類別中,其中 GO 代表 GameObject。
大多數資料消費者的工作是接受新資料,然後準備呈現。 這可能只是選擇合適的預製件,也可能意味著從雲端服務(如內容管理系統)取得更多資料。
撰寫資料收集題目排序
資料收集項目定位器負責管理收藏中目前可見的部分,以及如何呈現該可見收藏,無論是小型靜態清單還是龐大的百萬紀錄資料庫。
所有物品擺放器必須提供 IDataCollectionItemPlacer 介面。 部分基本功能包含於一個名為 DataColletionItemPlacerGOBase. 的基底類別中。 所有物品擺放器都應該源自這個類別。
已知的限制與缺失功能
- 尚未與 Unity 的 Canvas 控制項及可捲動清單整合。
- .NET INotifyPropertyChanged 的整合尚未實作。
- 從 Flickr 和 trymrtk.com 擷取圖片的範例場景,因為 Unity 後期版本的 HTTPS SSL 錯誤,在 HoloLens 上無法運作。
- 額外的性能調校。
- 本版本著重於資料呈現,而非資料擷取。 MRTK 的 UX 控制項還沒接線到可以設定狀態。
DataSource - 動態變更清單資料會完全刷新整個清單,而非逐步更新。
- 資料操作管線未實作
- 目前還不完全支援在 Slate 上填滿所有 UX 元件。
- DataSourceJson 節點應該實作
IDataNode介面,使其能與 DataSourceObjects 互通。