ドキュメント

サポート

Cloud Code

データ転送オブジェクト (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
) を使用するように DTO C# プロジェクトを設定する必要があります。
<project_name>.csproj
ファイルを開き、
TargetFramework
を変更します。Unity 2021.2.0 を使用している場合、これは
netstandard.2.1
です。
詳細については、Unity マニュアルの サポートされる .NET バージョン を参照してください。 暗黙的な使用を無効にする必要もあります。以下の C# プロジェクト設定例を参照してください。
<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
フォルダーに DLL があります。
アセンブリは以下の例のようになります。
├─ Main.csproj└─ bin └─ Debug └─ Release └─ net6.0 └─ linux-x64 └─ publish └─ Main.dll └─ Main.pdb └─ DTOs.dll └─ DTOs.pdb ...
DTOs.dll
ファイルをコピーします。

Unity プロジェクトへの DLL のインポート

ゲームで外部 DLL を使用するには、Unity プロジェクト内部の
Assets
ディレクトリに DLL を配置します。
次に Unity エディターがプロジェクトと同期するとき、必要な DLL への参照がエディターによって追加されます。 詳細については、マネージプラグイン (Unity マニュアル) を参照してください。

Unity 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}"); }}
参照として、以下の成功したレスポンスの例を使用します。
"You rolled 5 / 6"
詳細については、Unity Runtime からのモジュールの実行 に関する説明を参照してください。