Cluster Creator Kit Script Reference
    Preparing search index...

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

    以下はプレイヤースクリプトを設定する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 });

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

    • このアイテムを新しく「使う」をしたユーザーには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を代入します