データ転送オブジェクト (DTO)
Define data transfer objects to transfer data between client and server.
読み終わるまでの所要時間 2 分最終更新 23日前
モジュール内でデータ転送オブジェクトを定義できます。DTO を使用してクライアントとサーバー間でデータを転送できます。 例えば、DTO を使用して、モジュールデータを JSON にシリアル化し、クライアントサイドで同じ構造にデシリアライズできます。
前提条件
DTO の使用を準備する前に、Cloud Code モジュール を作成します。DTO の管理
モジュールエンドポイント関数のデータ型をキャプチャするための DTO を定義できます。DTO プロジェクトの作成と設定
使用の準備をするには、DTO を格納する C# プロジェクトを作成し、メインプロジェクトからそのプロジェクトへの参照を追加します。プロジェクト内の参照を管理 する方法については、Microsoft のドキュメントを参照してください。 モジュールの詳細については、モジュール構造 を参照してください。 次に、Unity エディターでサポートされるランタイム .NET バージョン (netstandard<project_name>.csprojTargetFrameworknetstandard.2.1<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.1</TargetFramework> <ImplicitUsings>disable</ImplicitUsings> <RootNamespace>DTOSample</RootNamespace> </PropertyGroup></Project>
モジュールへの DTO の追加
モジュールに DTO を追加するには、DTO を格納する新しいクラスをプロジェクト内に定義する必要があります。これは以下の例のようになります。namespace DTOSample{ public class DiceRollDto { public DiceRollDto(int roll, int sides) { Roll = roll; Sides = sides; } public int Roll { get; set; } public int Sides { get; set; } }}
モジュールロジックで DTO を使用する
モジュール関数のあるメインプロジェクトで、ゲームロジックを定義し、定義された DTO を関数の戻り値の型として使用します。 以下は、単純なモジュールエンドポイントの例です。using DTOSample;using Unity.Services.CloudCode.Core;namespace Sample;public class HelloWorld{ [CloudCodeFunction("RollDice")] public async Task<DiceRollDTO> RollDice(int diceSides) { var random = new Random(); var roll = random.Next(1, diceSides); return new DiceRollDTO(roll, diceSides); }}
DLL の抽出
Unity プロジェクトで DTO を使用してレスポンスの型を照合するには、モジュール C# プロジェクトから DLL を抽出する必要があります。 後でモジュール関数を呼び出せるように、このステップの モジュールをデプロイ する必要があります。 手動でパッケージ化する場合、アセンブリの生成方法の詳細については、パッケージコード を参照してください。 モジュールのデプロイ時にアセンブリを生成する場合、デフォルトでは、モジュールプロジェクトのbin/Debug/Release/net6.0/linux-x64/publish├─ Main.csproj└─ bin └─ Debug └─ Release └─ net6.0 └─ linux-x64 └─ publish └─ Main.dll └─ Main.pdb └─ DTOs.dll └─ DTOs.pdb ...
DTOs.dllUnity プロジェクトへの DLL のインポート
ゲームで外部 DLL を使用するには、Unity プロジェクト内部のAssetsUnity MonoBehaviour スクリプトでの DTO の再利用
Cloud Code SDK を呼び出し、同じ DTO を使用してレスポンスをデシリアライズできます。参照として、以下の成功したレスポンスの例を使用します。using DTOSample;using UnityEngine;using Unity.Services.Authentication;using Unity.Services.CloudCode;using Unity.Services.Core;public class Test : MonoBehaviour{ // Call this method to roll the dice (use a button) public async void Awake() { await UnityServices.InitializeAsync(); // Sign in anonymously to the Authentication service if (!AuthenticationService.Instance.IsSignedIn) await AuthenticationService.Instance.SignInAnonymouslyAsync(); // Call out to the Roll Dice script in Cloud Code var response = await CloudCodeService.Instance.CallModuleEndpointAsync<DiceRollDto>("Main", "RollDice", new Dictionary<string, object>() { {"diceSides", 6} }); // Log the response of the script in console Debug.Log($"You rolled {response.Roll} / {response.Sides}"); }}
詳細については、Unity Runtime からのモジュールの実行 に関する説明を参照してください。"You rolled 5 / 6"