Beta
angularアイテムの角速度(グローバル座標)を取得・変更します。
MovableItemでない場合は0ベクトルを返します。 物理挙動をするMovableItemでない場合、変更しようとすると例外になります。 Grab中などに行われた変更は無視されます。
Readonly
id空間内のアイテムを一意に表すIDの文字列表現です。 アイテムのItemHandleに対するItemHandle.idが返す値と同じです。
Readonly
itemアイテムのItemHandleを返します。
Readonly
Beta
itemクラフトアイテムの元になっているアイテムテンプレートのIDです。
ワールドアイテムの場合、この関数はnull
を返します。
createItem等で利用できます。
アイテムごとのstateへのアクセスを提供します。 read/writeアクセスが可能です。stateのプロパティへのアクセスにより、そのプロパティ名をkeyとしてstateへアクセスすることができます。
未定義のプロパティをreadしたときはundefined
が初期値になります。
let v = $.state.exampleKey; // "exampleKey"というkeyの値を読み込む。1度も書き込んでいないとき、値はundefined
if (v === undefined) { v = 0.0; }
$.state.exampleKey = v + 1;
stateには Sendable 型の値を書き込み保存することができます。
具体的には、数値、文字列、boolean、Vector2、Vector3、Quaternion、PlayerHandle、ItemHandle、そしてそれらの配列と文字列をキーとしたobjectが利用可能です。
$.state.exampleKey1 = 1; // numberを書き込む
$.state.exampleKey2 = "hello"; // stringを書き込む
$.state.exampleKey3 = true; // booleanを書き込む
$.state.exampleKey4 = { foo: "bar" }; // objectを書き込む
$.state.exampleKey5 = [1, 2, 3]; // arrayを書き込む
$.state.exampleKey6 = { // 複雑なオブジェクトを書き込む
array: [1, 2, 3],
object: { foo: "bar" },
};
配列やオブジェクトなどをstateに反映させるためには再代入が必要です。
$.state.exampleKey = [1, 2, 3];
// $.state.exampleKey.push(4); // このように書いてもstateに反映されない
// このように書くとstateに反映される
const v = $.state.exampleKey;
v.push(4);
$.state.exampleKey = v;
Beta
useこのアイテムが、通常時に重力の影響を受けるかを取得・変更します。
Grab中などはアイテムは重力の影響を受けませんが、useGravity
には影響がありません。
物理挙動をするMovableItemでない場合、falseを返します。 物理挙動をするMovableItemでない場合、変更しようとすると例外になります。
Beta
velocityアイテムの速度(グローバル座標)を取得・変更します。
MovableItemでない場合は0ベクトルを返します。 物理挙動をするMovableItemでない場合、変更しようとすると例外になります。 Grab中などに行われた変更は無視されます。
Beta
アイテムの重心に、現在のPhysicsUpdate中で有効な力を加えます。 onPhysicsUpdateのコールバック内部でのみ使用可能で、それ以外の箇所で呼び出すと例外になります。
力 (グローバル座標)
Beta
アイテムの指定位置に、現在のPhysicsUpdate中で有効な力(グローバル座標)を加えます。 onPhysicsUpdateのコールバック内部でのみ使用可能で、それ以外の箇所で呼び出すと例外になります。
Beta
アイテムの重心に撃力を加えます。 重心以外に撃力を加えたい場合はaddImpulsiveForceAtを使用してください。
撃力 (グローバル座標)
Beta
アイテムの重心に、現在のPhysicsUpdate中で有効なトルクを加えます。 onPhysicsUpdateのコールバック内部でのみ使用可能で、それ以外の箇所で呼び出すと例外になります。
トルク (グローバル座標)
空間の外部にリクエストを送信します。 レスポンスはonExternalCallEndで受け取ります。 この呼び出しを利用するためには、開発者自身が外部のサーバーを用意する必要があります。
callExternalを呼び出すことができる頻度には制限があります。
瞬間的にこの制限を超えることはできますが、平均回数はこの制限を下回るようにしてください。
制限を超えている場合、ClusterScriptError (rateLimitExceeded
)が発生し操作は失敗します。
requestやmetaがサイズ制限を超えている場合、ClusterScriptError (requestSizeLimitExceeded
) が発生します。
設定: リクエストを受け取るendpoint (外部通信(callExternal)接続先URL
) をCreator Kitから登録してください。
endpointはアカウントに紐付き、アカウントに対してひとつだけ設定できます。
リクエストはそのアイテム・ワールドをアップロードしたアカウントのendpointに送信されます。
Cluster ScriptからcallExternalが呼ばれるたびに、endpointに対してclusterのサーバーからHTTP POST呼び出しが行われます。 POSTに対するresponseに含まれるデータがonExternalCallEndに渡されます。 endpointが5秒のtimeoutを超えても応答しない場合、またエラーを返した場合、失敗と判定されます。 clusterからendpointに対するretryは行いません。
以下の形式でHTTP POSTに応答する必要があります。 対応しているのはHTTP/1.1およびHTTP/2のみで、HTTP/3による呼び出しには対応していません。 HTTPもしくはHTTPSに対応していますが、公開時にはセキュリティ向上のためHTTPSの利用を推奨します。
リクエスト
{
"request": "...1kB以下の文字列..."
}
レスポンス
{
"verify": "...verify_token (Creator Kitで取得できます)...",
"response": "...1kB以下の文字列..."
}
verifyフィールドは、開発者自身がendpointを管理していることを確認するために利用されます。 responseフィールドが1kBを超えていた場合、不正な応答とみなし、callExternalは失敗として扱われます。
不正な応答などでendpointの所有が確認できない場合はcallExternal APIの利用を制限させていただきます。 高負荷で応答ができていないと思われる場合なども、同様に制限やお問い合わせさせていただく場合があります。
プレイヤーの個人情報に該当する情報をプレイヤーの同意なく外部に送信することは禁止されています。 そのような利用が疑われる場合、callExternal APIの利用の制限や利用目的のお問い合わせをさせていただく場合があります。 また、当社が不適切と判断した場合、予告なく利用を制限させていただく場合もあります。
1kB以下の文字列です。外部のサーバーに送信されます。
100 byte以下の文字列です。複数のcallExternal呼び出しを識別するために利用できます。空文字や、同じ文字列を複数回指定しても問題ありません。
Beta
指定したアイテムを空間内に生成します。アイテムが実際に生成されるまでには遅延があります。
アイテムの生成は、負荷や権限など様々な理由で失敗する可能性があります。
生成されるアイテムのテンプレートは以下のいずれかを満たす必要があります。
クラフト容量が500%を超えるような生成は失敗します。
アイテムの生成に失敗した場合、返り値のItemHandleは指している先が存在しない状態になり、 ItemHandle.exists がfalseを返すようになります
アイテムが生成された時、このメソッドを呼び出した時点でのこのアイテムのオーナーが入室中であった場合、そのプレイヤーが生成されたアイテムのオーナーになります。
ひとつのアイテムは、最大で10回/秒までcreateItemすることができます。
瞬間的にこの制限を超えることはできますが、平均回数はこの制限を下回るようにしてください。
制限を超えている場合、ClusterScriptError (rateLimitExceeded
)が発生しcreateItemは失敗します。
生成されるアイテムのTemplateId
生成位置 (グローバル座標)
生成姿勢 (グローバル座標)
アイテム自身を破棄します。アイテムが実際に破棄されるまでに遅延があります。
destroyで破棄するアイテムは以下のいずれかを満たす必要があります。
destroyできないアイテムに対して呼び出した場合、ClusterScriptError (executionNotAllowed
)が発生します。
現状では、ワールド設置アイテムをdestroyすることはできません。
指定した球状の空間内に検知可能なコライダーが存在する自身を除くアイテムのハンドルの一覧を返します。 検知可能なコライダーは、PhysicalShapeが付いているコライダー、OverlapSourceShapeが付いているコライダー、Shapeが付いていない物理衝突をするコライダーです。 検知対象となるレイヤーはDefault, RidingItem, InteractableItem, GrabbingItemレイヤーです。
検知したアイテムのハンドルの配列 (順序は未定義)
中心 (グローバル座標)
半径
Beta
このアイテムのOverlapDetectorShapeに重なっている、検知対象となる物体を取得します。 検知対象となる物体は、PhysicalShapeが付いているコライダー、OverlapSourceShapeが付いているコライダー、Shapeが付いていない物理衝突をするコライダーです。 このアイテム自身との重なりは含まれません。
このアイテムもしくは検知対象となる物体のどちらかは、MovableItemであるか、Rigidbodyが付いているか、CharacterControllerがついているか、プレイヤーであるかのいずれかを満たす必要があります。 このアイテムのOverlapDetectorShapeが衝突判定するレイヤーが検知対象となります。 アイテムの生成時点ですでに重なっていたり、重なっている状態で有効化された場合など、空間的には重なっている場合にもこのメソッドの返り値に含まれない場合があります。
// 自分と重なっているプレイヤーを数える。
let set = new Set();
let overlaps = $.getOverlaps();
for(let overlap of overlaps) {
let player = overlap.object.playerHandle;
if (player != null && !set.has(player.id)) {
set.add(player.id);
}
}
$.log(`player count: ${set.size}`);
指定した球状の空間内のコライダーが存在するプレイヤーのハンドルの一覧を返します。
検知したプレイヤーのハンドルの配列 (順序は未定義)
中心 (グローバル座標)
半径
アイテムの現在の姿勢を取得します。値はアイテムのあるグローバル座標系で返されます。
setRotationで指定された値ではなく、移動中のアイテムの姿勢が返されることに留意してください。
Creator Kit 製ワールドで対象のメッセージを取得します。 Creator Kitのワールドに組み込まれたアイテムでしか利用できません。 クラフトアイテムで実行した場合はエラーになります。
// 自身のアイテムを対象に foo という識別子の boolean型のメッセージを取得する。
$.getStateCompat("this", "foo", "boolean");
メッセージを取得する対象
"this": このアイテムへのメッセージを取得します。
"owner": このアイテムのオーナーへのメッセージを取得します。
"global": Globalへのメッセージを取得します。
メッセージの識別子
メッセージの型
"signal", "boolean", "float", "double", "integer", "vector2", "vector3" が利用できます。
Beta
アイテムのHumanoidAnimationListに含まれる、humanoidAnimationId
に指定したidのアニメーションを参照するHumanoidAnimationオブジェクトを返します。
HumanoidAnimationListの詳細はドキュメントを参照してください。
Beta
アイテムのItemMaterialSetListに含まれる、materialId
に指定したidのマテリアルを参照するMaterialHandleオブジェクトを返します。
ItemMaterialSetListの詳細はドキュメントを参照してください。
// Interactするとマテリアルの色が変わるアイテム
$.onInteract(() => {
const mh = $.material("materialId");
mh.setBaseColor(new Color(Math.random(), Math.random(), Math.random(), 1));
});
Beta
このアイテムが別の物体と衝突したタイミングで呼ばれるcallbackを設定します。アイテムは物理挙動をする必要があります。
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
$.onCollide(collision => {
if (collision.object.playerHandle != null) {
$.log("collide with a player.");
}
});
callExternalが完了した場合に呼ばれるcallbackを登録します。 callbackはcallExternalの成功時または失敗時に一回ずつ呼び出されます。
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
response: 外部から取得したレスポンス。失敗した場合はnullです。 meta: callExternalの時に渡したものと同じ文字列です。errorReason: responseがnullの場合、失敗の理由。
アイテムを掴む・手放すときに呼ばれるcallbackを登録します。アイテムにはGrabbableItemコンポーネント
が付いている必要があります。
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
$.onGrab((isGrab, isLeftHand) => {
if (isGrab) {
if (isLeftHand) {
$.log("grabbed by left hand.");
} else {
$.log("grabbed by right hand.");
}
}
});
アイテムを掴んだ・手放したプレイヤーのハンドルを取得できます。
// 掴んでいる間、移動速度を上げる。
$.onGrab((isGrab, isLeftHand, player) => {
if (isGrab) {
player.setMoveSpeedRate(2);
} else {
player.setMoveSpeedRate(1);
}
});
isGrab = 掴んだときにtrue、手放したときにfalseになります。
isLeftHand = 左手で掴んだときや左手で手放したときにtrue、右手で掴んだときや右手で手放したときにfalseになります。
player = アイテムを掴んだ・手放したプレイヤーのハンドルです。
掴めないアイテムに「使う」動作をした際に呼ばれるcallbackを登録します。アイテムには1つ以上のColliderコンポーネント
が付いている必要があります。
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
$.onInteract(() => {
$.log("interacted.");
});
アイテムにインタラクトしたプレイヤーのハンドルを取得できます。
// インタラクトしたプレイヤーをリスポーンさせる。
$.onInteract(player => {
player.respawn();
});
player = アイテムにインタラクトしたプレイヤーのハンドルです。
Beta
このアイテムの物理状態が更新されるタイミングで呼ばれるcallbackを設定します。 (UnityではFixedUpdateに対応します)
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
// 1秒間上昇して2秒かけて落下する。
// RigidbodyのMassが1であることが想定されています。
$.onPhysicsUpdate(deltaTime => {
let t = $.state.time ?? 0;
t += deltaTime;
if (t < 1) {
$.addForce(new Vector3(0, 12, 0));
} else if (t > 3) {
t = 0;
}
$.state.time = t;
});
ItemHandle.send、またはPlayerScript.sendToでItemId宛てに送られたメッセージを受け取ったときに呼ばれるcallbackを登録します。
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
ベータでは引数 option
を指定できます。
ベータでない場合、option引数を設定するとエラーになります。
option
の指定によって、 PlayerScript.sendTo から送信されたメッセージを受け取ることができます。
PlayerScript.sendTo から送信されたメッセージを受け取る場合は、引数の option
を設定してください。
optionが未設定の場合、あるいはベータではない場合、ItemHandle.sendからのメッセージのみ受け取ります。
option.item
が true
の場合、ItemHandle.send から送信されたメッセージを受け取ります。option.item
が false
の場合、ItemHandle.send から送信されたメッセージを無視します。option.item
が未設定の場合、ItemHandle.send から送信されたメッセージを受け取ります。option.player
が true
の場合、PlayerScript.sendTo から送信されたメッセージを受け取ります。option.player
が false
の場合、PlayerScript.sendTo から送信されたメッセージを無視します。option.player
が未設定の場合、PlayerScript.sendTo から送信されたメッセージを無視します。option.player
が未設定の場合の扱いはPlayerScript.onReceiveと異なります。
ClusterScript.onReceive
では既存のスクリプトの互換性を破壊しないためにオプションが未設定の場合はPlayerScriptからのメッセージは受け取りません。
ベータではない場合、ItemHandle.sendからのメッセージのみ受け取ります。
// 送られたメッセージがdamageかhealのときに、ログを出力する。
$.onReceive((messageType, arg, sender) => {
switch (messageType) {
case "damage":
$.log(`damage: ${arg}`);
break;
case "heal":
$.log(`heal: ${arg}`);
break;
}
});
// PlayerScriptからのattackメッセージを受け取りログを出力する。(ベータ)
$.onReceive((messageType, arg, sender) => {
if (messageType === "attack") {
if (sender instanceof ItemId) {
$.log(`attack: ${arg}`);
}
}
}, { player: true });
senderは送信元のアイテムもしくは送信元のPlayerHandleを表します。
Optional
option: { item: boolean; player: boolean }(beta) コールバックの登録のオプションです。受け取るメッセージの種類を指定できます。
乗ることができるアイテムに乗る・降りるときに呼ばれるcallbackを登録します。アイテムにはRidableItemコンポーネント
が付いている必要があります。
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
// プレイヤーが乗っている間だけ回転する。
$.onRide(isGetOn => {
$.state.isRiding = isGetOn;
});
$.onUpdate(deltaTime => {
if (!$.state.isRiding) return;
let t = $.state.time ?? 0;
t += deltaTime;
$.state.time = t % 360;
$.setRotation(new Quaternion().setFromEulerAngles(0, t, 0));
});
アイテムに乗った・降りたプレイヤーのハンドルを取得できます。
$.onRide((isGetOn, player) => {
$.state.isRiding = isGetOn;
$.state.player = isGetOn ? player : null;
});
isGetOn = 乗るときにtrue、降りるときにfalseになります。
player = アイテムに乗った・降りたプレイヤーのハンドルです。
このアイテムが新たに空間に現れたとき、初めてonUpdateが実行される前に一度だけ呼ばれるcallbackを登録します。
このアイテムが新たに空間に現れたときとは、以下のいずれかのことを指します。
createItem
及びcreateItemGimmick
でアイテムが生成されたとき スクリプトロード時に最後に登録したcallbackのみが有効になります。
詳細はonStartの呼び出しルールについてを参照してください
PlayerHandle.requestTextInputで要求した文字列入力の応答を受け取ったときに呼ばれるcallbackを登録します。
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
$.onTextInput((text, meta, status) => {
switch(status) {
case TextInputStatus.Success:
$.log(text);
break;
case TextInputStatus.Busy:
// 5秒後にretryする
$.state.should_retry = true;
$.state.retry_timer = 5;
break;
case TextInputStatus.Refused:
// 拒否された場合は諦める
$.state.should_retry = false;
break;
}
});
text = プレイヤーが入力した文字列です。文字列のサイズは1000byte以下かつ文字数は250以下(ただしASCIIは1文字当たり0.5文字として換算します)です。
meta = PlayerHandle.requestTextInputで指定したmeta文字列です。
status = 文字列入力が成功したかどうかを示すステータスです。
updateループ毎に呼ばれるcallbackを登録します。
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
// 10秒間隔でログを出力する。
$.onUpdate(deltaTime => {
let t = $.state.time ?? 0;
t += deltaTime;
if (t > 10) {
$.log("10 sec elapsed.");
t -= 10;
}
$.state.time = t;
});
掴んでいるアイテムに「使う」動作をしたときに呼ばれるcallbackを登録します。アイテムにはGrabbableItemコンポーネント
が付いている必要があります。
スクリプトのトップレベルでの呼び出しのみサポートされます。 トップレベルで複数回呼ばれた場合、最後の登録のみが有効です。
$.onUse(isDown => {
$.log(`isDown: ${isDown}.`);
});
アイテムを使ったプレイヤーのハンドルを取得できます。
// 使ったプレイヤーに上方向の速度を加える。
$.onUse((isDown, player) => {
if (isDown) {
player.addVelocity(new Vector3(0, 5, 0));
}
});
isDown = 「使う」動作を開始したときにtrue、終了したときにfalseになります。
player = アイテムを使ったプレイヤーのハンドルです。
Beta
レイが最初に衝突した物体を取得します。
衝突した物体 (衝突しなかった場合はnull)
Beta
レイが衝突した全ての物体を取得します。
衝突した物体の配列 (順序は未定義)
Creator Kit 製ワールドで対象にシグナルを通知します。 Creator Kitのワールドに組み込まれたアイテムでしか利用できません。 クラフトアイテムで実行した場合はエラーになります。
メッセージを通知する対象
"this": このアイテムへメッセージを通知します。
"owner": このアイテムのオーナーへメッセージを通知します。
メッセージの識別子
Beta
アイテムのPlayerScriptコンポーネントが持つスクリプトをプレイヤーに登録します。 アイテムにPlayerScriptコンポーネントがついていない場合は例外を投げます。
PlayerScriptコンポーネントの詳細はドキュメントを参照してください。
このアイテムが削除されると、スクリプトの登録は解除されます。 同一のプレイヤーに対して複数回setPlayerScriptメソッドが呼ばれた場合、先に登録されていたスクリプトは削除され、最後に登録されたスクリプトだけが実行されます。
登録されたスクリプトからは、PlayerScript.sourceItemIdを使うことで、スクリプトを登録したアイテムの参照を取得することができます。
アイテムの回転させたい姿勢を指定します。値はアイテムのあるグローバル座標系で指定します。
アイテムにはMovableItemコンポーネント
が付いている必要があります。
姿勢はネットワークを介して補間して同期されるため、即座に反映されない場合があることに留意してください。
$.setRotation(new Quaternion().setFromEulerAngles(new Vector3(90, 0, 0)));
Creator Kit 製ワールドで対象にメッセージを通知します。 Creator Kitのワールドに組み込まれたアイテムでしか利用できません。 クラフトアイテムで実行した場合はエラーになります。
// 自身のアイテムを対象に foo という識別子で boolean型のメッセージを通知する。
$.setStateCompat("this", "foo", true);
メッセージを通知する対象
"this": このアイテムへメッセージを通知します。
"owner": このアイテムのオーナーへメッセージを通知します。
メッセージの識別子
メッセージの値
Generated using TypeDoc
アイテム自身を操作するハンドルです。個々のアイテムごとに存在し、
$
オブジェクトからアクセスできます。