見出し画像

はじめてのベータ機能|ジャンプ台をつくる!②

こんにちは!イナバです。
メタバースプラットフォーム「cluster」でワールドやアイテムを制作しております。
今回は前回の記事に引き続きベータ機能のジャンプ台を作っていきたいと思います。
前回の記事はこちら。


スクリプトの設定方法

前回の記事でアップロードしたアイテムをワールドに設置し、F12キーを押してスクリプトエディターを起動します。

スクリプトエディターにスクリプトを書いていく

公式の記事に記載のある以下のスクリプトをそのままコピペして貼り付けます。

const velocity = new Vector3(0, 10, 0);


$.onUpdate(deltaTime => {
    // 初期化
    if (!$.state.initialized) {
        $.state.initialized = true;
        $.state.overlapPlayers = [];
    }


    // 前のフレームで接触していたプレイヤーIDの一覧
    let previousOverlapPlayers = $.state.overlapPlayers;


    // このフレームで接触しているプレイヤーIDの一覧
    let currentOverlapPlayers = [];


    // 接触しているオブジェクトをすべて取得
    let overlaps = $.getOverlaps();


    overlaps.forEach(overlap => {
        // 接触しているオブジェクトがプレイヤーであるかどうかを確認
        let playerHandle = overlap.object.playerHandle;
        if (playerHandle == null) return;


        // 現在接触しているプレイヤーの一覧に追加
        currentOverlapPlayers.push(playerHandle.id);


        // 前のフレームで接触していたプレイヤーは除外
        // playerHandle.addVelocityの実行には頻度制限があるためその対策、また接触し続けた場合に加速し続けてしまうことを防止
        if (previousOverlapPlayers.includes(playerHandle.id)) return;


        // プレイヤーに一定の速度を加えて打ち上げる
        playerHandle.addVelocity(velocity);
    });


    $.state.overlapPlayers = currentOverlapPlayers;
});

うまくいけば、CUBEに触れると自動でジャンプするようになり、ジャンプ台の完成です!

CUBEに触れるとジャンプする!

応用編① ジャンプの向きと高さを変える

スクリプト冒頭に以下の数字を変えることによってジャンプの高さや方向を変えることができます。
new Vector3はかっこ内の数字がそれぞれ、(X軸,Y軸,Z軸)方向への速度既定しているので、例えば以下のように変えるとすると。

const velocity = new Vector3(0, 50, 0);

Y軸方向へのジャンプの高さが大きくなります。

大ジャンプ

次のように変えると

const velocity = new Vector3(0, 10, 10);

Y軸方向に加えて、Z軸方向にもジャンプするようになります。

前方へジャンプする!

応用編② 触れるとリスポーンさせる

respawn();はプレイヤーをリスポーン地点に移動させるので
以下のスクリプトをコピペすると・・・。

$.onUpdate(deltaTime => {
    // 初期化
    if (!$.state.initialized) {
        $.state.initialized = true;
        $.state.overlapPlayers = [];
    }


    // 前のフレームで接触していたプレイヤーIDの一覧
    let previousOverlapPlayers = $.state.overlapPlayers;


    // このフレームで接触しているプレイヤーIDの一覧
    let currentOverlapPlayers = [];


    // 接触しているオブジェクトをすべて取得
    let overlaps = $.getOverlaps();


    overlaps.forEach(overlap => {
        // 接触しているオブジェクトがプレイヤーであるかどうかを確認
        let playerHandle = overlap.object.playerHandle;
        if (playerHandle == null) return;


        // 現在接触しているプレイヤーの一覧に追加
        currentOverlapPlayers.push(playerHandle.id);


        // 前のフレームで接触していたプレイヤーは除外
        // playerHandle.addVelocityの実行には頻度制限があるためその対策、また接触し続けた場合に加速し続けてしまうことを防止
        if (previousOverlapPlayers.includes(playerHandle.id)) return;


        // プレイヤーをリスポーンさせる
        playerHandle.respawn();
    });


    $.state.overlapPlayers = currentOverlapPlayers;
});

CUBEに触れることでリスポーン地点(初期位置)に戻るようになります。

障害物などプレイヤーの進行を邪魔するアイテムに使用できそうですね!

この二つを組み合わせるだけでもゲームワールドが作れそうです。
お試しあれ!



この記事が気に入ったらサポートをしてみませんか?