Variable _Const Player

_オブジェクトは、PlayerScriptのインスタンスです。

Player Scriptコンポーネントのスクリプト内でのみ利用できます。 $.setPlayerScript(playerHandle) を呼び出すことでPlayer Scriptコンポーネントのスクリプトをプレイヤーに設定することができます。

Scriptable Itemのスクリプトとは実行環境が異なります。 Scriptable ItemとPlayer Scriptのスクリプトは独立して動作します。

Scriptable Itemのスクリプトとは変数などが自動で共有されることはありません。 Scriptable ItemとPlayer Scriptのスクリプトの間で値を受け渡す場合はPlayerScript.sendToPlayerHandle.sendを利用してください。

PlayerScriptのスクリプトはScriptable Itemのスクリプトと異なり、定期的に環境がリセットされることはありません。 そのため、グローバル変数に状態を保存し、コールバックをまたいで利用することができます。

Example

以下はプレイヤースクリプトを設定するScriptable Itemのスクリプトの例です。 アイテムに対して「使う」をしたプレイヤーにPlayer Scriptのスクリプトが設定されます。 このアイテムにPlayer Scriptコンポーネントがアタッチされていない場合はエラーになります。

$.onInteract((player) => {
// playerに対してPlayerScriptをセットする
$.setPlayerScript(player);
});

以下は初期化時にログを出すPlayer Scriptコンポーネントのスクリプトの例です。 上記のScriptable Itemと組み合わせて使うことで、プレイヤーがアイテムを使ったときにログを出します。

// PlayerScriptがセットされた時に以下のログ表示が実行される
_.log("PlayerScript is initialized.");
_.log("Source Item ID is " + _.sourceItemId.id);

Example

以下はメッセージで受け取ったItemIdに対して次のフレームでメッセージを送り返すPlayer Scriptコンポーネントのスクリプトの例です。

下記のScriptable ItemコンポーネントのスクリプトとPlayer Scriptコンポーネントのスクリプトを合わせて使うことで、ScriptableItemからPlayerScriptにメッセージを送る方法と、PlayerScriptからScriptableItemへメッセージを送る方法が確認できます。

まずはScriptable Itemに次のスクリプトを記述します。

$.onStart(() => {
// PlayerScriptを与えたプレイヤーの履歴をstateに記録する
$.state.players = [];
});

$.onInteract((player) => {
if ($.state.players.find(p => p.id === player.id)) {
// すでにPlayerScriptを与えたplayerにはメッセージを送る
player.send("send", "")
} else {
// stateの履歴に存在しないplayerにはPlayerScriptを与えて履歴に記録する
$.setPlayerScript(player);
$.state.players = [...$.state.players, player]
}

// 存在しなくなったプレイヤーを履歴から取り除く
$.state.players = $.state.players.filter(p => p.exists());
});

$.onReceive((messageType, arg, sender) => {
if (messageType === "hello") {
// "hello"メッセージを受け取ったらログに表示する
$.log("hello " + arg);
}
}, { player: true });

このスクリプトは次のことを行っています。

  • このアイテムを新しく「使う」をしたユーザーにはPlayerScriptを与えます
  • すでにPlayerScriptを与えたユーザーが「使う」をした際にはメッセージを送ります
  • "hello"メッセージを受け取ったらログに表示します

次に以下のスクリプトをPlayer Scriptコンポーネントに記述します。

// メッセージのsenderのItemIdを格納する変数を用意する
let itemId = null;

// PlayerScriptがメッセージを受け取ったときのコールバックを登録する
_.onReceive((messageType, arg, sender) => {
switch (messageType) {
case "send":
if (sender instanceof ItemId) {
// Itemから"send"メッセージを受け取ったらlogを表示する
_.log("Received from ItemId: " + sender.id);
// グローバル変数のitemIdにsenderを代入する
itemId = sender;
}
break;
}
});

// PlayerScriptで毎フレーム呼ばれるコールバックを登録する
_.onFrame((deltaTime) => {
if (itemId !== null) {
// itemIdがnullでない場合、itemIdに"hello"メッセージを送ってitemIdをnullにする
_.sendTo(itemId, "hello", "world");
itemId = null;
}
});

このスクリプトでは次のことを行っています。

  • "send" というメッセージを受け取ると、その送信者のItemIdを itemId という変数に記録します
  • itemId という変数がnullかどうかを毎フレームチェックして、nullではない場合にメッセージを送りnullを代入します

Generated using TypeDoc