クラウド スクリプトの基本的な概念
Mesh Cloud Scripting と Mesh Visual Scripting の 概要を読む
メッシュ クラウド スクリプトと MonoBehaviour の違い
Mesh Cloud Scripting と MonoBehaviours には、いくつかの大きな違いがあります。
- クラウド スクリプト サービスは、(Unity API ではなく) Mesh Cloud Scripting API に対して記述されます。
- Cloud Scripting Services は、(クライアントではなく) 別のプロセスでクラウドで実行され、その影響は接続されているすべてのクライアントに自動的に同期されます。
アーキテクチャの概要
Mesh Cloud Scripting を有効にするために、 Mesh Cloud Scripting Service というアプリケーション サービスが、指定した特定の Azure リソース グループにデプロイされます。 クラウド スクリプトは Azure バックエンドで実行され、クライアントが接続するエンドポイントを持つコンテナーで実行されている一連のサーバー C# スクリプトで構成されます。 次の図では、Cloud Scripting Service に接続する 2 つのクライアントがあることがわかります。 Cloud Scripting Service には、独自の権限のあるシーン グラフがあります (図では "A" とマークされています)。 Cloud Scripting Service は、Mesh Cloud Scripting シーン グラフ API を使用して、このシーン グラフと対話します。
Mesh Cloud Scripting シーン グラフは、クラウドから接続されているすべてのクライアントに自動的に同期されます。 各クライアントには、メッシュ クラウド スクリプト シーン グラフ (図では "B" とマークされています) のコピーが同一であり、権限のあるクラウド バージョンと同期されます。 Mesh Cloud Scripting Service がクラウド内のシーン グラフに変更を加えると、これらの変更はすべてのクライアントのコピーに反映されます。
各クライアントでは、Unity Mesh ランタイムは、Mesh Cloud Scripting シーン グラフのクライアントインスタンスの変更に対応し、Unity シーンをその状態を反映するように更新します。 Mesh Cloud Scripting シーン グラフ API と Unity シーン グラフ API は異なりますが、互いに密接にマップされ、同じ構造または類似の構造を持ちます。
Mesh Cloud Scripting、Game Objects、Mesh Cloud Scripting Scene Graph
最終的に Mesh アプリのイベントに表示されるオブジェクトは、次の 2 つのカテゴリに分けることができます。
Unity で環境に追加するオブジェクト。
イベントをカスタマイズオブジェクト。 これらは環境の一部ではないため、Mesh Cloud Scripting では認識されません。
シーンの構築
Mesh Cloud Scripting を有効にするには、シーンに Mesh Cloud Scripting コンポーネントが必要です。
コンポーネントは、作成したスクリプトを管理し、編集時と Mesh アプリの実行時の両方で Unity シーンにバインドする役割を担います。 Mesh Cloud Scripting はスタンドアロン テクノロジですが、Unity と緊密に統合されています。 Mesh Cloud Scripting GameObject を追加する手順については、簡単なクラウド スクリプト プロジェクトの作成Programmer のガイドセクションのスクリプト作成に関する詳細情報を参照してください。
Mesh Cloud Scripting シーン グラフは、Mesh Cloud Scripting コンポーネントを含む GameObject の下のシーンに追加する GameObject に限定されます。 Mesh Cloud Scripting では、シーンの残りの部分のシーン階層を直接表示することはできませんが、Mesh アプリが提供する API にアクセスできます。たとえば、シーン内のユーザーの一覧を取得したり、選択されているオブジェクトに対応したりできます。
コンポーネントとメッシュ クラウド スクリプト シーン グラフ
次の図では、Unity シーンとメッシュ クラウド スクリプト シーンの階層が同じであることに注意してください。 Unity シーン セクションの青いノードは GameObjects を表します。すべての GameObject には、メッシュ クラウド スクリプト シーン グラフに対応する TransformNode があります。 TransformNode が更新されると、Unity シーン内で対応するゲーム オブジェクトの変換が同じ値に更新されます。
Mesh Cloud Scripting API には、Unity コンポーネントの完全なセットの subset にのみマップされる型があります。 Mesh Cloud Scripting API がマップできないコンポーネントを含む Unity シーンを作成することは引き続き有効です。メッシュ クラウド スクリプティングでは見えなくなります。 図では、白い色のコンポーネントには、Mesh Cloud Scripting シーン グラフ内の対応するノードがあります。緑色のコンポーネントは表示されません。 Mesh Cloud Scripting シーン グラフにはパーティクル システム ノードがないため、この例では、Unity シーンのパーティクル システム コンポーネントは対応する Mesh Cloud Scripting シーンに表示されません。 ただし、その周囲のコンポーネントと所有するゲーム オブジェクト メッシュ クラウド スクリプト シーン グラフに があります。 つまり、Mesh Cloud Scripting は、パーティクル システム自体がクラウド スクリプティングから見えない場合でも、所有するゲーム オブジェクトを移動することで、パーティクル システムをシーン内で移動できます。
Mesh Cloud Scripting API を使用すると、ノードの複製が可能になります。 アプリが Unity シーンで "A" ノード (GameObjectParent に対応する) のクローンを作成すると、パーティクル システム Mesh Cloud Scripting でGameParentObject including のサブ ツリー全体が複製されます。
Mesh クラウド スクリプトの作成
Mesh Cloud Scripting の詳細な手順については、 シンプルなクラウド スクリプト プロジェクトの作成 および Programmer のガイド 記事を参照してください。 ここでは、簡単な概要について説明します。
Mesh Cloud Scripting を使用するシーンを含む一般的な Unity プロジェクトは、ディスク上では次のようになります (フォルダーは太字で表示されます)。
- Unity プロジェクト
- アセット
- Scenes
- MyScene.unity
- .MeshCloudScripting
- MyScene
- MyScene.csproj
- Program.cs
- scene.map
- App.cs
- MyScene
- Scenes
- アセット
MeshCloudScripting コンポーネントを含む Unity プロジェクトの各シーンには、".に含まれる同じ名前の対応するフォルダーがあります。Assets ディレクトリの MeshCloudScripting" フォルダー。 Mesh Cloud Scripting コンポーネントは、このフォルダーとそのファイルの初期セットを作成します。このファイルは、完全に動作しますが、空の Cloud Scripting Service にコンパイルされます。 最初のファイルの一部を上に示します。 Program.cs
には、次の処理を行う定型コードが含まれています。
IHostBuilder を構成して
App
service を起動します。IHost インスタンスを構築する。
IHost
インスタンスを実行して完了します。
App.cs
は、アプリケーション ロジックをホストするクラスです。 IHostedService インターフェイスを実装するため、StartAsync
とStopAsync
の 2 つのエントリ ポイントがあります。 StartAsync
は、 IHost
が App
サービスを開始する準備ができたときに、1 回トリガーされます。 また、IHost
が正常なシャットダウンを実行すると、StopAsync
がトリガーされます。
シーンリプレゼンテーション
上記の一覧の scene.map ファイルに注意してください。 これは内部的な詳細ですが、理解すると便利です。 UI で手動でトリガーされた場合、または Unity シーンがエディターで再生される場合、Mesh Cloud Scripting コンポーネントは、 scene.map ファイルを対応する Mesh Cloud Scripting フォルダーに書き込みます。 これは、シーンをメッシュ クラウド スクリプト シーン階層として表現したものです。Unity 型は Mesh Cloud Scripting 型に変換されます。 Mesh Cloud Scripting Service がクラウドにデプロイされている場合、元の Unity シーンを実行する必要はありません。 代わりに、初期シーン階層を定義する scene.map ファイルが読み込まれます。 Mesh クライアントは、 Mesh Cloud Scripting Service に接続すると、Mesh Cloud Scripting 階層を受け取り、一致するように Unity シーンを更新します。 これを可能にするために、シーン内の対応する Unity オブジェクトにマップするために使用される Mesh Cloud Scripting バインドに ID を追加で格納します。
注: 上記を機能させるには、 scene.map ファイルと Unity シーンが一致している必要があります。 何らかの理由でエクスポート エラーが発生した場合など、これらのエラーが検出され、 Mesh Cloud Scripting Service Mesh クライアントは接続されません。
Mesh クラウド スクリプトを使用した環境の発行
Mesh Cloud Scripting を使用して環境を発行すると、環境と Mesh Cloud Scripting Service が Azure に発行されます。 これを次の図に示します。
シーンを変更するときは、Unity で Play を押して、新しくビルドされ、ローカルで実行されている Mesh Cloud Scripting Service でシーンをプレビューする必要があります。 次に、Mesh Uploader を使用して変更された環境を発行します。 発行の詳細については、Build で詳しく説明し、環境を発行しますビルドと発行に関するProvide Cloud Scripting の詳細記事を参照してください。
Mesh クラウド スクリプト サービスでの認証
クラウド スクリプト サービスは、ユーザーの一覧を保持できます。 ユーザーが認証されると、クラウド スクリプト サービスは複数のセッションにわたってユーザーの永続的な識別子を持ちます。
しかし、Mesh Cloud Scripting Service の認証フロー最後から余分な労力を必要としません。 これは完全に暗黙的であり、関係する当事者はトークンを取得し、自動的に検証する作業を行います。
認証フローに関係する関係者を次に示します。
Mesh toolkit: クラウド スクリプト サービスをクラウドにデプロイするツールとして、クラウド スクリプト サービスが認証トークンの検証に使用する Service Mode
を選択できます。 これは、Mesh Uploader UI の [環境設定] 設定で行うことができます。
Microsoft Mesh Service: トークンの発行を担当します。 トークンがないと、ユーザーはクラウド スクリプトを操作できません。
Microsoft Mesh: ユーザーが Mesh Cloud Scripting と対話する方法のエントリ ポイント。 Microsoft Mesh クライアントは、ユーザーに代わって Microsoft Mesh Service からアクセス トークンを要求する責任を負います。
Mesh Cloud Scripting Service: Microsoft Mesh Service に対する接続要求から受信したトークンを検証し、トークンから永続的なユーザー識別子を選択します。
両当事者は、以下に示すように連携します。