Unity エディターとのインテグレーション
Cloud Code オーサリングモジュール (Cloud Code パッケージとともにインストールされる) を使用すると、任意で、スクリプトのオーサリングと変更を Unity エディター内で直接的に行うことができます。その後、Deployment パッケージ を使用して、Unity エディターからダッシュボードにスクリプトをアップロードできます。
Unity エディターでのスクリプトのオーサリングは、Unity 2021.3 以上でのみサポートされます。
Unity エディターに存在するスクリプトを使用すると、ユーザーは (クラウド内のバージョンの代わりに) ソース管理を信頼できる唯一の情報源として扱うことができ、ロールバック、二等分、その他の一般的な操作のアクションが簡略化されます。例えば、Cloud Code オーサリングモジュールは、クライアントの C# スクリプトと Cloud Code スクリプトの同期を保つなどのタスクを容易にします。
前提条件
Unity エディターで Cloud Code を使用するには、最初に Cloud Code SDK をインストールし、Unity Gaming Services プロジェクト を Unity エディターにリンクする必要があります。
プロジェクトのリンク
Unity Gaming Services プロジェクト を Unity エディターにリンクします。UGS プロジェクト ID は Unity Dashboard にあります。
Unity エディターで、Edit (編集) > Project Settings (プロジェクト設定) > Services (サービス) の順に選択します。
プロジェクトをリンクします。
プロジェクトに Unity プロジェクト ID がない場合:
- Create a Unity Project ID (Unity プロジェクト ID の作成) > Organizations (組織) の順に選択し、ドロップダウンメニューから組織を選択します。
- Create project ID (プロジェクト ID を作成) を選択します。
既存の Unity プロジェクト ID がある場合:
- Use an existing Unity project ID (既存の Unity プロジェクト ID を使用) を選択します。
- ドロップダウンメニューから組織とプロジェクトを選択します。
- Link project ID (プロジェクト ID をリンク) を選択します。
Unity プロジェクト ID が表示され、プロジェクトが Unity サービスにリンクされました。また、UnityEditor.CloudProjectSettings.projectId
を使用して Unity エディタースクリプトのプロジェクト ID にアクセスすることもできます。
必須パッケージのインストール
エディター内で Cloud Code スクリプトを作成するには、以下のパッケージをインストールする必要があります。
- Deployment
- Cloud Code (2.1.1 以降)
Unity - マニュアル: Package Manager ウィンドウ を参照し、Unity Package Manager インターフェースについて理解してください。
これらのパッケージをインストールして、使用可能なパッケージのリストに追加するには、以下を行います。
- Unity エディターの Package Manager (パッケージマネージャー) ウィンドウで、+ (add) (+ (追加)) > Add package by name… (名前でパッケージを追加...) を選択します。
com.unity.services.deployment
を入力します。- Add (追加) を選択します。
- これらのステップを
com.unity.services.cloudcode
について繰り返します。
Unity エディター内でのオーサリング
Cloud Code オーサリングモジュールを使用すると、直接 Unity エディター内で、Cloud Code スクリプトの作成、編集、デプロイを行うことができます。
スクリプトの作成
以下のステップに従い、Cloud Code オーサリングモジュールを使用して Cloud Code スクリプトを作成します。
- Unity エディターで、Project ウィンドウを右クリックし、Create (作成) > Cloud Code Js Script (Cloud Code Js スクリプト) を選択します。
- C# スクリプトの場合と同様に、スクリプトに名前を付けます。Cloud Code スクリプトでは、サービスをアップロードするときに、それらのファイル名を識別子として使用します。
- Enter を押します。
Cloud Code は、使用できる識別子名を制限します。ファイルが正しくアップロードされたことを確認するには、スクリプトの作成 を参照してください。
新しいスクリプトが Project ウィンドウに表示されます。また、Deployment (デプロイ) ウィンドウでは、Window (ウィンドウ) > Deployment (デプロイ) を選択してアクセスできます。
スクリプトの編集
既存の Cloud Code オーサリングスクリプトを編集する方法は 2 つあります。
- Project (プロジェクト) タブで、既存のスクリプトをダブルクリックします。
- Deployment (デプロイ) ウィンドウで、既存のスクリプトを探し、右クリックメニューから Open (開く) を選択します。
デフォルトでは、Cloud Code スクリプトはデフォルトの JavaScript エディターに開きます。
デフォルトの JavaScript エディターを設定するには、以下を行います。
- Unity エディターで、Edit (編集) > Preferences... (環境設定...) > Cloud Code を選択します。
- Javascript Editor (Javascript エディター) セクションで、優先する JS エディターのアプリケーションパスを選択します。
- Apply (適用) を選択します。
上級者向けケースでは、以下の引数を指定できます。
$(File)
: アセットのファイルパス$(ProjectPath)
: プロジェクトディレクトリ$(SolutionPath)
: ソリューションパス$(EditorExePath)
: エディターの実行ファイルパス (Unity エディター内で Edit (編集) > Preferences… (環境設定...) > External Tools (外部ツール) を選択することで選択します)
以下は、いくつかの可能な設定例を表します。
JetBrains Rider (Windows 上):
- アプリケーション:
cmd.exe
- 引数:
/C "$(EditorExePath) $(ProjectPath) $(File)"
- アプリケーション:
Microsoft Visual Studio Code:
- アプリケーション:
Code.exe
- 引数:
$(ProjectPath) $(File)"
- アプリケーション:
スクリプトのデプロイ
スクリプトは Deployment (デプロイ) ウィンドウからデプロイできます。詳細については、Deployment パッケージのマニュアル を確認してください。
スクリプトパラメーターの変更
Unity エディターで Cloud Code スクリプトパラメーターにアクセスして変更できます。
エディターの Inspector ウィンドウでパラメーターにアクセス
Unity エディターの Project ウィンドウでスクリプトを選択することにより、Cloud Code スクリプトのパラメーターを変更できます。スクリプトのパラメーターがエディターの Inspector ウィンドウに開きます。
スクリプトのパラメーターを変更すると、既存のゲームクライアントが非互換になる可能性があります。クライアントは、非互換のパラメーターを送信したり、必須のパラメーターを送信しなかったりする可能性があります。
可能なパラメーター型は以下のとおりです。
- String
- Boolean
- Numeric
- JSON
- Any (任意)
Inspector では、パラメーターの編集のサポートに制限があり、UGS CLI はこれらのパラメーターを読み取ることができません。エディターと CLI の両方を使用する場合は、スクリプト内でパラメーター を使用します。
スクリプト本文でのパラメーターの宣言
Cloud Code スクリプトでのシームレスな体験のために、各パラメーター名をキーとして、その型を値として含む params
オブジェクトをエクスポートすることで、パラメーターをスクリプト内で直接宣言できます。
パラメーターを設定する前に module.exports
プロパティを割り当てる必要があります。
例:
JavaScript
module.exports.params = { "echo" : "Boolean" }
または、パラメーターが必須であることを指定したい場合は、type
と required
の両方のプロパティを含むオブジェクトを指定できます。
JavaScript
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 }
}
スクリプトパラメーターを使用している場合、それらは以前に定義した Inspector パラメーターをオーバーライドします。
スクリプト内パラメーターは、パラメーターを宣言するためのよりシンプルな代替方法を提供しますが、Deployment パッケージを使用せずに更新しようとした場合、Unity Dashboard は現在スクリプト内パラメーターを解析しません。
JS バンドル
JS バンドルは、com.unity.services.cloudcode@2.3.0 以上で使用可能であり、UGS コマンドラインインターフェースではまだサポートされていません。
JS スクリプトは、import
または require
キーワードを使用してローカルスクリプトまたは外部モジュールをインポートできます。バンドルプロセスでは、スクリプトを入力として使用し、バンドル結果を Unity Dashboard にフィードします。このプロセスは、ローカルファイルを変更しません。
スクリプトでバンドルを有効にするには、bundling
オブジェクトをエクスポートし、値を true に設定します。このプロセスはスクリプトごとです。デフォルトでは、スクリプトはバンドルされません。バンドルを有効にした場合、スクリプトは Deployment ウィンドウ を介したデプロイの前にバンドルされます。
バンドルオプションを設定する前に、module.exports プロパティを割り当てる必要があります。
JavaScript
module.exports.bundling = true;
以下の例は、サンプルプロジェクトでバンドルがどのようになるかを示しています。
lib.js
module.exports.helloWorld = "Hello world!";
scriptToBundle.js
const lib = require("./lib");
module.exports = async ({ params, context, logger }) => {
return {
"value": lib.helloWorld
};
};
module.exports.bundling = true;
Deployment (デプロイ) ウィンドウ
Deployment (デプロイ) ウィンドウは、Deployment パッケージのコア機能です。これを使用すると、すべてのサービスが、デプロイニーズに合う 1 つのまとまったインターフェースを持つことができ、クラウドアセットをそれぞれのクラウドサービスにアップロードできます。
詳細については、Deployment パッケージのマニュアル を確認してください。
Unity エディター内の Cloud Code JavaScript プロジェクト
Unity エディター内の Cloud Code JavaScript プロジェクトは、Unity プロジェクトのルートに配置され、以下の構造を持ちます。
├── Assets
│ └── CloudCode
│ └── cloud_script.js
├── node_modules
├── package.json
└── package-lock.json
package.json
には、プロジェクト設定が格納されます。このファイルは JavaScript (JS) エディターと NPM によって使用され、C# が .csproj ファイルタイプを使用して Unity エディターの情報を定義する方法と同様に動作します。JavaScript プロジェクト内で使用されるこれらの package.json
ファイルは Unity パッケージではなく、NPM パッケージです。これは、Unity と NodeJS が同じパッケージ管理システムを使用していることとは偶然の一致です。
package-lock.json
は NPM によって生成され、依存関係解決のために使用されます。このファイルをソース管理して、依存関係が常に同じ方法で解決されるようにすることをお勧めします。
NodeJS
開発者用の他のツールをサポートするには、開発者は NodeJS をインストールする必要があります。NodeJS では、オートコンプリートおよび開発環境に期待されるその他の機能をサポートできます。
オートコンプリート
JS のオートコンプリートの大半は、型定義 プロジェクトによって処理されます。.d.ts
ファイルを使用して、型定義された API を定義することで、JavaScript ファイルを強化できます。ほとんどのパブリック JS ライブラリには、独自の .d.ts
ファイルが含まれるか、型定義内で定義されたものがあります。
エディターで依存関係のオートコンプリートを有効にするには、依存関係の型定義を特定できる必要があります。これは、node_modules
を参照することで行います。オートコンプリートを有効にするには、package.json
ファイルを使用して適切なファイルを node_modules
にインストールします。
外部ツール
JS プロジェクト内から適切な npm install ...
コマンドを実行して、外部ツールを追加できます。次に、公式なツールガイドラインに従って、これらのツールを設定できます。
ESLint と Jest の以下の例を考えてみましょう。
ESLint
npm i -D eslint
を実行します。このコマンドは、ESLint をプロジェクトの依存関係に追加します。プロジェクトのルートに、以下を含む
.eslint.json
ファイルを作成します:\JSON
{ "env": { "commonjs": true, "es2021": true }, "extends": "eslint:recommended", "parserOptions": { "ecmaVersion": 13 }, "rules": { } }
ESLint を実行するように IDE を設定します。これは、Visual Studio Code では自動的に行われますが、IDE によっては追加の設定が必要になることがあります。
ESLint が設定され、動作しています。
ESLint が動作していることをテストするには、有効だが eslint:recommended
ルールセットに違反しているコードを追加します。例えば、if (something == -0)
では IDE に ESLint 警告が表示されます。
Jest
Jest は、JavaScript テスト用のフレームワークです。以下は、Cloud Code スクリプトの単体テストを作成する方法の例です。
npm install --save-dev jest
を実行します。このコマンドにより、Jest パッケージがインストールされます。.es10
スクリプトで実行するように Jest を設定します。以下のコードスニペットを
package.json
に追加します:\JSON
"jest": { "moduleFileExtensions": ["es10", "js"], "testMatch": ["**/*.test.es10"] }
moduleFileExtensions
エントリーにより js
および es10
ファイルがテストに対して有効になり、testMatch
エントリーにより .test.es10
で終わるファイルがテストファイルとして有効になります。
単体テストの例
以下の JS 単体テストの例は、オブジェクトを返してから、テストスクリプトの結果が同じかどうかを確認します。より高度なオプションはモッキングで使用可能です。
テストするスクリプト:
Cloud Code は以下のシグネチャを期待します。
JavaScript
module.exports = async ({ params, context, logger }) => {
return {value: "1"};
};
テストスクリプト:
JavaScript
const test = require("./jest_01.es10")
it("test",async () =>{
expect(await test({})).toMatchObject({value:"1"});
});
テストの実行
コマンドラインで、以下のコマンドを使用してテストを実行します: npm run test
。