Const
Player
_オブジェクトは、PlayerScriptのインスタンスです。
_
Player Scriptコンポーネントのスクリプト内でのみ利用できます。 $.setPlayerScript(playerHandle) を呼び出すことでPlayer Scriptコンポーネントのスクリプトをプレイヤーに設定することができます。
$.setPlayerScript(playerHandle)
Scriptable Itemのスクリプトとは実行環境が異なります。 Scriptable ItemとPlayer Scriptのスクリプトは独立して動作します。
Scriptable Itemのスクリプトとは変数などが自動で共有されることはありません。 Scriptable ItemとPlayer Scriptのスクリプトの間で値を受け渡す場合はPlayerScript.sendToやPlayerHandle.sendを利用してください。
PlayerScriptのスクリプトはScriptable Itemのスクリプトと異なり、定期的に環境がリセットされることはありません。 そのため、グローバル変数に状態を保存し、コールバックをまたいで利用することができます。
以下はプレイヤースクリプトを設定する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);
以下はメッセージで受け取った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 });
このスクリプトは次のことを行っています。
"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
Generated using TypeDoc
_
オブジェクトは、PlayerScriptのインスタンスです。Player Scriptコンポーネントのスクリプト内でのみ利用できます。
$.setPlayerScript(playerHandle)
を呼び出すことでPlayer Scriptコンポーネントのスクリプトをプレイヤーに設定することができます。Scriptable Itemのスクリプトとは実行環境が異なります。 Scriptable ItemとPlayer Scriptのスクリプトは独立して動作します。
Scriptable Itemのスクリプトとは変数などが自動で共有されることはありません。 Scriptable ItemとPlayer Scriptのスクリプトの間で値を受け渡す場合はPlayerScript.sendToやPlayerHandle.sendを利用してください。
PlayerScriptのスクリプトはScriptable Itemのスクリプトと異なり、定期的に環境がリセットされることはありません。 そのため、グローバル変数に状態を保存し、コールバックをまたいで利用することができます。
Example
以下はプレイヤースクリプトを設定するScriptable Itemのスクリプトの例です。 アイテムに対して「使う」をしたプレイヤーにPlayer Scriptのスクリプトが設定されます。 このアイテムにPlayer Scriptコンポーネントがアタッチされていない場合はエラーになります。
以下は初期化時にログを出すPlayer Scriptコンポーネントのスクリプトの例です。 上記のScriptable Itemと組み合わせて使うことで、プレイヤーがアイテムを使ったときにログを出します。
Example
以下はメッセージで受け取ったItemIdに対して次のフレームでメッセージを送り返すPlayer Scriptコンポーネントのスクリプトの例です。
下記のScriptable ItemコンポーネントのスクリプトとPlayer Scriptコンポーネントのスクリプトを合わせて使うことで、ScriptableItemからPlayerScriptにメッセージを送る方法と、PlayerScriptからScriptableItemへメッセージを送る方法が確認できます。
まずはScriptable Itemに次のスクリプトを記述します。
このスクリプトは次のことを行っています。
"hello"
メッセージを受け取ったらログに表示します次に以下のスクリプトをPlayer Scriptコンポーネントに記述します。
このスクリプトでは次のことを行っています。
"send"
というメッセージを受け取ると、その送信者のItemIdをitemId
という変数に記録しますitemId
という変数がnullかどうかを毎フレームチェックして、nullではない場合にメッセージを送りnullを代入します