🔗 公式ドキュメント
ClusterScriptの詳細なリファレンスは以下の公式ページで確認できます:
https://docs.cluster.mu/script/
📘 基本概念
ClusterScriptはJavaScriptベースで記述され、各アイテムに付属する形で実行されます。
スクリプトごとに独立した状態($.state)を持ち、空間内で並列実行されます。
- 他のアイテムとは直接通信できず、API経由でのみ情報交換が可能
- 負荷軽減のため、実行時間やメモリに制限がある
📚 APIと制限事項
- 呼び出し頻度に制限あり(例:1秒に10回など)
- 引数や文字列長などに容量制限あり
- 制限超過時は
ClusterScriptErrorが発生 - ベータAPIは特定の設定空間でのみ利用可能
📂 スクリプト構造
スクリプトの実行タイミングは以下の通りです:
$.onStart():初期化処理(1回だけ)$.onUpdate():毎フレーム実行$.onInteract():プレイヤー操作時$.onReceive():他アイテムやプレイヤーからのメッセージ受信時
トップレベルでのAPI呼び出しには注意が必要です。
ランダム値や現在時刻はonStart内で取得してください。
🎮 ハンドルと操作
他のアイテムやプレイヤーを参照するには「ハンドル(Handle)」を使います。
- ItemHandle:アイテム参照
- PlayerHandle:プレイヤー参照
API例:
$.onReceive((type, arg, sender) => {
if (sender instanceof PlayerHandle) {
$.log("from player");
}
});
🌐 ワールドクラフトにおける挙動
- 誰かが空間に入っている時のみスクリプトが実行される
- アイテムのコピーでは
onStart()が再実行される - 投稿済みワールドでは、投稿時の状態が保持される
クラフトモード中の操作・試用中でもスクリプトは動作します。
🕒 時刻とタイムゾーン
new Date() は環境依存のため、タイムゾーンを明示した関数を使うのが推奨されています。
function getJSTDate() {
const date = new Date();
date.setTime(date.getTime() + 3600000 * 9);
return {
hours: date.getUTCHours(),
minutes: date.getUTCMinutes(),
seconds: date.getUTCSeconds()
};
}