アバタースクリプト

アバタースクリプトはアバターにバインドされます。つまり、ユーザーが特定のアバターを身につけたときに実行されます。同様に、アバタースクリプトはアバターが削除されたり変更されたりすると、実行を停止します。ドメイン内の他のユーザーは、スクリプトの動作を見ることができますが、自分でスクリプトを実行することはできません。

アバタースクリプトを使えば、髪をなびかせたり、アバターの周りにパーティクルクラウドを発生させたりすることができます。

コンテンツ

アバタースクリプトを追加する

FSTファイルにアバタースクリプトを追加するには、パッケージモデルツールを使用する方法と、手動でスクリプトを追加する方法の2種類があります。

パッケージモデルツールを使用してアバタースクリプトを追加するには:

  1. FBX、GLB、またはglTFファイルと同じ場所にscriptsというフォルダを作成します。

  2. アバタースクリプトをこの新しいフォルダーにコピーします。

  3. インターフェイスにおいて、**[編集]>[パッケージモデル]**に移動します

  4. [スクリプトディレクトリ]には、上記で作成したscriptsフォルダへのパスを入力します。

アバタースクリプトを手動で追加するには:

  1. 選択したテキストエディタでアバターのFSTファイルを開きます。

  2. 構文script = [SCRIPT URL]を使用して、アバターにスクリプトファイルの場所を示す行を追加します。

複数のscript = url行を追加することで、アバターに複数のスクリプトを追加できます。

アバタースクリプトの例

次のスクリプトは、右手が動いたときにアバターにボールを投げさせます。

(function(){
    var triggerDistance = 0.0;
    var TRIGGER_THRESHOLD = 0.9;
    var LOAD_THRESHOLD = 0.6
    var init = false;
    var rightHandIndex = MyAvatar.getJointIndex("RightHand");
    var rightArmIndex = MyAvatar.getJointIndex("RightArm");
    var distance = 0.0;
    var triggered = false;
    function fireBall(position, speed) {
        var baseID = Entities.addEntity({
            type: "Sphere",
            color: { blue: 128, green: 128, red: 20 },
            dimensions: { x: 0.1, y: 0.1, z: 0.1 },
            position: position,
            dynamic: true,
            collisionless: false,
            lifetime: 10,
            gravity: speed,
            userData: "{ \"grabbableKey\": { \"grabbable\": true, \"kinematic\": false } }"
        }); 
        Entities.editEntity(baseID, { velocity: speed });
    }
    Script.update.connect(function() {
        rightHandPos = MyAvatar.getJointPosition(rightHandIndex);
        rightArmPos = MyAvatar.getJointPosition(rightArmIndex);
        fireDir = Vec3.subtract(rightHandPos, rightArmPos);
        var distance = Vec3.length(fireDir);
        triggerDistance = distance > triggerDistance ? distance : triggerDistance;
        if (!triggered) {
            if (distance < LOAD_THRESHOLD * triggerDistance) {
                triggered = true;
            }
        } else if (distance > TRIGGER_THRESHOLD * triggerDistance) {
            triggered = false;
            fireBall(rightHandPos, Vec3.normalize(fireDir));
        }     
    });
    MyAvatar.scaleChanged.connect(function () {
        triggerDistance = 0.0;
    });
}());

このサンプルスクリプトは、MyAvatar名前空間を使用して、アバターの手が動くかどうかを判断します。動きを検出すると、スクリプトはアバターにボールを発射させます。また、Entities(起動するボールを作成するため)やVec3などの他の名前も使用します。Vec3 (適切な位置と距離を決定するため)。それをアバターに追加して、どのように機能するかを確認してください。

関連項目