雲端腳本基本概念
Mesh 雲端腳本與MonoBehaviours之間的差異
Mesh Cloud Scripting 和 MonoBehaviours 之間有數個主要差異:
- 雲端腳本服務是針對 Mesh 雲端腳本 API 撰寫的(與 Unity API 相反)。
- 雲端腳本服務會在不同的程式中在雲端中執行(與用戶端相反),而且其效果會自動同步處理至所有連線的用戶端。
架構概觀
若要啟用 Mesh 雲端腳本,稱為 Mesh 雲端腳本服務 的應用程式服務會部署到您提供的特定 Azure 資源群組。 雲端腳本會在 Azure 後端執行,並包含一組在容器中執行的伺服器 C# 腳本,以及用戶端所連線的端點。 在下圖中,您可以看到有兩個用戶端連線到雲端腳本服務。 雲端腳本服務有自己的權威場景圖表(圖表中標示為“A”。 雲端腳本服務會透過網格雲端腳本場景圖形 API 與此場景圖形互動。
網格雲端腳本場景圖形會自動從雲端同步處理到所有連線的用戶端。 每個用戶端都有一份相同的 Mesh 雲端腳本場景圖表複本(圖表上標示為 “B”),它會與權威雲端版本保持同步。 當 Mesh 雲端文本服務 對雲端中的場景圖形進行變更時,這些變更會傳播到所有用戶端上的複本。
在每個用戶端上,Unity Mesh 運行時間都會回應用戶端的 Mesh 雲端腳本場景圖形實例變更,並更新 Unity 場景以反映其狀態。 雖然 Mesh 雲端腳本場景圖形 API 和 Unity 場景圖形 API 不同,但它們彼此對應並具有相同或類似的結構。
網格雲端腳本、遊戲物件和網格雲端腳本場景圖形
最終出現在 Mesh 應用程式中事件的物件可以分成兩個類別:
您在 Unity 中新增至環境的物件。
您使用 自訂事件 的物件。 因為這些不是環境的一部分,因此 Mesh 雲端腳本不會察覺到這些腳本。
建置場景
若要啟用 Mesh 雲端腳本,您的場景必須具有 Mesh 雲端腳本 元件。
元件負責管理您在 Mesh 應用程式中的編輯時間和運行時間建立並系結至 Unity 場景的腳本。 Mesh Cloud Scripting 是獨立技術,但它與 Unity 緊密整合。 您可以在名為建立簡單雲端腳本專案的文章中找到新增 Mesh Cloud Scripting GameObject 的指示,以及程式設計人員指南一節中腳本的詳細資訊。
Mesh Cloud Scripting 場景圖形僅限於您在包含 Mesh 雲端腳本元件的 GameObject 底下新增至場景的 GameObject。 雖然 Mesh 雲端腳本無法直接查看場景其餘部分的場景階層,但它可以存取 Mesh 應用程式提供的 API,例如,它可以取得場景中的使用者清單,或回應選取的物件。
元件和網格雲端腳本場景圖形
在下圖中,請注意 Unity 場景和 Mesh 雲端腳本場景的階層相同。 Unity 場景區段中的藍色節點代表 GameObjects;每個 GameObject 在 Mesh 雲端腳本場景圖形中都有對應的 TransformNode。 當 TransformNode 更新時,它會導致它對應至 Unity 場景中的遊戲物件轉換,以更新為相同的值。
Mesh 雲端腳本 API 的類型僅對應至一 組完整的 Unity 元件子集 。 使用 Mesh 雲端腳本 API 無法對應至的元件建立 Unity 場景仍然有效;它們只會對 Mesh Cloud Scripting 看不見。 在圖表中,白色元件具有網格雲端腳本場景圖形中的對應節點;綠色的元件不會。 Mesh Cloud Scripting 場景圖形沒有粒子系統節點,因此在我們的範例中,Unity 場景中的粒子系統元件不會顯示在對應的 Mesh 雲端腳本場景中。 不過,其周圍的元件和擁有遊戲對象 位於 Mesh Cloud Scripting場景圖形中。 這表示 Mesh Cloud Scripting 能夠藉由行動自己的遊戲物件來移動場景周圍的粒子系統,即使粒子系統本身對 Cloud Scripting 而言是看不見的。
Mesh 雲端文本 API 允許複製節點。 如果應用程式製作 「A」 的複製品(對應至 Unity 場景中的 “A” 節點 GameObjectParent),這會複製 GameParentObject 的整個子樹狀結構,包括粒子系統 Mesh Cloud Scripting 看不到。
撰寫 Mesh 雲端腳本
如需 Mesh Cloud Scripting 的詳細指示,請參閱 建立簡單的雲端腳本專案 和 程式設計人員指南 文章。 在這裡,我們會提供簡短的概觀。
包含 Mesh Cloud Scripting 場景的一般 Unity 專案會在磁碟上如下所示(資料夾顯示為粗體):
- Unity 專案
- 資產
- 場景
- MyScene.unity
- .MeshCloudScripting
- MyScene
- MyScene.csproj
- Program.cs
- scene.map
- App.cs
- MyScene
- 場景
- 資產
Unity 專案中包含 MeshCloudScripting 元件的每個場景,都有 「中所含相同名稱的對應資料夾」。Assets 目錄中的 MeshCloudScripting“ 資料夾。 Mesh Cloud Scripting 元件會建立此資料夾及其初始檔案集,其會編譯成可完全運作的檔案集,不過是空的雲端腳本服務。 上面顯示一些初始檔案。 Program.cs
包含可處理下列項目的重複使用程式代碼:
設定IHostBuilder 以啟動
App
服務。建置 IHost 實例。
執行
IHost
實例以完成。
App.cs
是裝載應用程式邏輯的類別。 它會實作 IHostedService 介面,因此它有兩個進入點: StartAsync
和 StopAsync
。 StartAsync
當準備好啟動App
服務時IHost
,就會觸發一次。 當執行正常關機時IHost
,StopAsync
也會觸發 。
場景表示法
請注意上述 清單中的 scene.map 檔案。 這是內部詳細數據,但瞭解很有用。 在 UI 中手動觸發時,或 Unity 場景在編輯機中播放時,Mesh Cloud Scripting 元件會將 scene.map 檔案寫入對應的 Mesh Cloud Scripting 資料夾中。 這是將場景表示為 Mesh 雲端腳本場景階層;Unity 類型會轉換成 Mesh 雲端腳本類型。 當 Mesh 雲端腳本服務部署至雲端時,不需要執行原始的 Unity 場景。 相反地,它會載入 定義初始場景階層的 scene.map 檔案。 當 Mesh 用戶端連線到 Mesh 雲端腳本服務時,它會接收 Mesh 雲端腳本階層,並更新其 Unity 場景以符合。 為了允許這一點,我們另外會將標識符儲存在 Mesh Cloud Scripting 系結中,這些系結是用來對應至場景中對應的 Unity 物件。
注意:若要讓上述專案正常運作, scene.map 檔案和 Unity 場景必須相符。 例如,如果基於某些原因,它們不會發生導出錯誤,則會偵測到此錯誤, 而且 Mesh 雲端腳本服務和 Mesh 用戶端不會連線。
使用 Mesh 雲端腳本發佈環境
當您使用 Mesh 雲端腳本發佈環境時,它會將環境與 Mesh 雲端腳本服務 發佈至 Azure。 下圖顯示:
當您變更場景時,應該按 Unity 中的 Play ,以使用新建置且在本機執行的 Mesh 雲端腳本服務來預覽場景。 然後使用 Mesh Uploader 發佈修改的環境。 在建置和發佈您的環境以及提供建置和發佈文章的雲端腳本詳細數據中,會更詳細地說明發佈。
Mesh 雲端腳本服務中的 驗證
雲端腳本服務可以保留其用戶是誰的清單。 一旦使用者通過驗證,雲端腳本服務就會針對跨多個會話的使用者提供永續性標識碼。
也就是說,Mesh 雲端腳本服務中的驗證流程不需要您端的任何額外工作。 這完全是隱含的,相關物件會努力取得令牌並自動進行驗證。
以下是驗證流程所涉及的合作物件:
Mesh 工具組:身為雲端腳本服務部署至雲端的工具,您可以選擇 Service Mode
雲端腳本服務用來驗證驗證令牌。 這可以在 Mesh Uploader UI 的 [環境組態] 設定中完成。
Microsoft Mesh 服務:負責發行令牌。 如果沒有令牌,用戶就無法與雲端腳本互動。
Microsoft Mesh:使用者如何與 Mesh 雲端腳本互動的進入點。 Microsoft Mesh 用戶端負責代表使用者向 Microsoft Mesh 服務要求存取令牌。
Mesh 雲端腳本服務:驗證它從針對 Microsoft Mesh Service 連線要求收到的令牌,然後從令牌中挑選永續性使用者標識碼。
雙方共同合作,如下所示: