2024年8月29日、メタバースプラットフォーム「cluster」にて、ワールド内課金機能が実装されました。
今回はcluster公式が出しているサンプルプログラムを改変し、課金完了後に課金ユーザーの位置を移動させるようにするための追加コードをご紹介したいと思います。
【サンプル付き】ワールドで課金ができる!「ワールド内課金」機能を使ってみよう! - Cluster Creators Guide|バーチャル空間での創作を学ぶなら
8/29のCluster Conference2024で発表された「ワールド内課金」機能。8/29にClust
下記が公式から配布されているUnityパッケージを一部改変したものです。
ざっくり構造を説明すると以下のようになります。
SupportBox(スクリプト)
├ Model(インタラクト対象オブジェクト)
├ Collider(コライダー)
├ AudioSource(課金完了後に再生される音源)
└ Text(課金完了後に出力されるテキストの元)
改変時は、インタラクトするModelの中身や、AudioSourceをいじることが多くなりそうですが、元入っているオブジェクトを消して新たなオブジェクトを追加するだけなので簡単です。
では次にスクリプトのコードをご紹介します。赤文字部分が追加をした箇所です。
const productId = ""; // 商品ID
const pos = new Vector3(0, 0, 5); // 移動対象位置
$.onStart(() => {
// 購入通知を購読する
$.subscribePurchase(productId);
});
$.onUpdate(deltaTime => {
// 10秒に1回、定期的にスペース内にいるすべてのプレイヤーの購入状況を確認する
let timer = $.state.timer ?? 0;
timer -= deltaTime;
if (timer <= 0) {
timer += 10;
const allPlayers = $.getPlayersNear(new Vector3(), Infinity);
$.getOwnProducts(productId, allPlayers, "");
}
$.state.timer = timer;
});
$.onInteract(player => {
player.requestPurchase(productId, "");
});
$.onPurchaseUpdated((player, productId) => {
// 商品が購入された場合、スペース内にいるすべてのプレイヤーの購入状況を確認する
const allPlayers = $.getPlayersNear(new Vector3(), Infinity);
$.getOwnProducts(productId, allPlayers, "");
});
$.onGetOwnProducts((ownProducts, meta, errorReason) => {
// 商品の所持状況を取得したとき
let total = 0;
for (let ownProduct of ownProducts) {
// スペース内での商品所持数の合計を計算
total += ownProduct.plusAmount - ownProduct.minusAmount;
}
// スペース内での商品所持数の合計数を表示
// $.subNode("Text").setText("みんなのサポート数: " + total);
});
$.onRequestPurchaseStatus((meta, status, errorReason, player) => {
if (status == PurchaseRequestStatus.Purchased) {
// Play Audio Source Gimmickがついたアイテムにシグナルを送る
$.sendSignalCompat("this", "SupportSE");
// 課金したプレイヤーの位置を移動させる
player.setPosition(pos);
}
});
これで完了です。
複数人でのデバッグは行っていないためあくまでも参考となりますが、よろしければご活用ください。
productIdの箇所は、clusterのWebページから追加して取得します。「マイコンテンツ>(対象ワールドの)情報編集」の画面に行くと最下部に商品追加の項目があります。
必要な情報を記入し保存した後、再度商品情報を見るとIDが確認できます。
非常に手軽に課金ができる仕組みですので悪用されないようご注意ください。また、本ソースコードにより発生した損害については責任を負えませんため、ご利用の際は十分な検証の上、自己責任でご利用いただくようお願いいたします。