スクリプトの構造
Understand the structure of a Cloud Code script and how the main function acts as the entry point.
読み終わるまでの所要時間 3 分最終更新 23日前
ランタイムのエントリーポイントとして機能する Cloud Code スクリプトのメイン関数は、CommonJS ラッパーの形式をとります。 以下のコードスニペットは、可能なかぎり最も単純なスクリプトを示します。 JavaScript
このスクリプトは実際には何も行いませんが、スクリプト関数のコンテキストオブジェクトと非同期の性質を示します。module.exports = async ({ params, context, logger }) => { // this script does nothing};
コンテキストオブジェクト
コンテキストオブジェクトには、以下の有用なオブジェクトが含まれます。-
: これは、スクリプトが呼び出されるときに使用される入力パラメーターの名前と値のペアの配列です。
Params -
: このオブジェクトは、スクリプト内で役立つ追加のコンテキストを提供します。
Context- : 呼び出し元が認証されたプロジェクト ID。
projectId - : 認証されたプレイヤー ID。
playerId - : 他の Unity ゲームサービス SDK を認証されたプレイヤーとして呼び出すために使用できる JWT。
accessToken - : 現在使用されている Unity 環境 の名前。
environmentName - : 現在使用されている Unity 環境の ID。
environmentId - : 他の Unity ゲームサービス SDK を認証された Cloud Code ユーザーとして呼び出すために使用される JWT。
serviceToken - : クライアントのデバイス上のインストールを識別する一意の識別子。異なるデバイスにゲームをインストールしている場合は、同じプレイヤーが異なる
unityInstallationIdを持つ可能性があります。Services SDK Core パッケージと統合されるすべての Unity パッケージで使用可能です。installationId - : プレイヤーを識別する一意の文字列で、分析を目的として後続のプレイセッションで一貫して使用されます。これはプライマリユーザー識別子であり、Core パッケージから取得されます。
analyticsUserId - : リクエストを関連付けるために使用される一意の識別子。
correlationId
-
: スクリプトが情報、警告、エラーをログに記録できるようにするオブジェクト。
Logger
JavaScript
詳細については、ロギング のドキュメントを参照してください。module.exports = async ({logger}) => { logger.info('This message confirms that the logging client is functional!'); logger.warning('This is a serious warning that the cheese is about to run out.'); logger.error('Out of cheese :(');}
トークン認証
accessTokenserviceTokencontextトークンタイプ | 発生元 | データアクセス | 使用方法 |
|---|---|---|---|
| Authentication サービス によって生成されます | 認証されたプレイヤーに限定されます | |
| Cloud Code によって生成されます | クロスプレイヤーデータアクセスを可能にします | |
accessTokenaccessTokenJavaScript
// Player inventoryconst { InventoryApi } = require("@unity-services/economy-2.4");module.exports = async ({params, context, logger}) => { const { projectId, playerId, accessToken } = context; const inventory = new InventoryApi({accessToken}); const result = await inventory.getPlayerInventory({projectId, playerId}); return result.data;}
serviceTokenJavaScript
2 つのトークンの違いの詳細な説明は、サービスとアクセストークン を参照してください。// Player inventoryconst { InventoryApi } = require("@unity-services/economy-2.4");module.exports = async ({params, context, logger}) => {const { projectId, playerId } = context;const inventory = new InventoryApi(context);const result = await inventory.getPlayerInventory({projectId, playerId});return result.data;}
スクリプトパラメーター
スクリプトパラメーターは、スクリプト本文の外部または内部で定義できます。スクリプト内パラメーター
スクリプト内パラメーターは、各パラメーター名をキーとして、型を値として含むparams
例を次に示します。
JavaScript
または、パラメーターが必須であることを指定したい場合は、module.exports.params = { "echo" : "Boolean" }
typerequiredJavaScript
デフォルトでは、パラメーターは必須ではありません。 どちらの形式も希望に応じて組み合わせることができます。module.exports = async ({ params, context, logger }) => { return { "value": params["aParam"] };};module.exports.params = { "aParam" : { "type": "String", "required": true } }
JavaScript
module.exports = async ({ params, context, logger }) => { var value = params["echo"] ? params["aParam"] : "default"; return { "value": value };};module.exports.params = { "echo" : "Boolean", "aParam" : { "type": "String", "required": true } }
async/await
メインスクリプト関数は、非同期関数にすることができます。これは、関数が await promise を実行できることを意味します。これにより、スクリプト内で他の Unity ゲームサービス SDK を使用できるようになります。promise について説明している Mozilla ドキュメントを確認してください。 簡単な例は以下のようになります。JavaScript
// Player inventoryconst { InventoryApi } = require("@unity-services/economy-2.4");module.exports = async ({params, context, logger}) => { const { projectId, playerId } = context; const inventory = new InventoryApi(context); const result = await inventory.getPlayerInventory({projectId, playerId}); return result.data;}
その他のパッケージ
スクリプトは、importrequireJavaScript
const _ = require("lodash-4.17");module.exports = async () => { return _.random(1, 6);};
バンドル
スクリプトバンドルは、Unity エディター内で Deployment パッケージを使用して有効化される機能であり、ローカルでのスクリプトの管理、追加のワークフローのロック解除、複数のスクリプト間で共有する一般的な機能の有効化に役立ちます。バンドルされたスクリプトの生成方法について詳しくは、JS バンドル のドキュメントを参照してください。
JavaScript
const lib = require("./lib");module.exports = async () => { return lib.helloWorld();};module.exports.bundled = true;
出力
スクリプトの出力は、以下の型から構成できます。JavaScript
stringmodule.exports = async () => { return "hello world";};booleanmodule.exports = async () => { return true;};numbermodule.exports = async () => { return 3.14;};objectmodule.exports = async () => { return { message: "hello world", success: true };};
{ "output": <SCRIPT OUTPUT>}
エラー出力
エラーは、何かが呼び出しの失敗の原因となった場合に (例えば、失敗したサービスリクエスト)、スクリプトによってスローされることがあります。 スクリプト内でエラーを捕捉すると、失敗を処理する方法を決定できます。JavaScript
エラーレスポンスは、エラータイプ、エラーメッセージ、およびエラーの原因を特定するのに役立つスタックトレースとともに、API から JSON として返されます。module.exports = async ({logger}) => { try { let result = service.call("example"); return result; } catch (err) { logger.error("Something went wrong!", {"error.message": err.message}); throw err; }};
{ "type": "problems/invocation", "title": "Unprocessable Entity", "status": 422, "detail": "Invocation Error", "instance": null, "code": 9009, "details": [ { "name": "ReferenceError", "message": "service is not defined", "stackTrace": [ "at module.exports (example-test.js:1:26)" ] } ]}