将 vector3 从补丁发送到脚本不起作用

Sending a vector3 to script from patches is not working

所以我用 cannon.js 在 spark AR 中制作了一个球弹跳。一切正常,直到我想通过补丁编辑器从 facetracker 获取前额的位置到脚本。

错误:

    Error:Exception in HostFunction: valueOf() called on a Signal. This probably means that you are
    trying to perform an arithmetic operation on a signal like +, -, *, etc. Use functions .add, .sub(), 
    etc on the signal instead or .subscribeWithSnapshot() on an EventSource to get the signal's current value on a callback.
at ScalarSignal::valueOf (native)
{
"line": 4841,
"column": 19,
"sourceURL": "cannon.js"
}

My patches将额头的vector3发送到脚本。

这段代码出现错误:

var pos = Patches.getVectorValue('HeadPos');
groundBody.position.set(pos);

遗憾的是,我在网上找不到任何有关将补丁中的 vector3 发送到脚本中的 'Working' 值的信息,有人知道如何将 vector3 值发送到脚本并将其用作值?

我在使用 cannon.js 时找到了一个解决方案。 cannon.js 具有一种更新功能,因此您可以使用 .pinLastValue() 因为它会在每一帧执行此操作以更新物理特性。

我的代码:

// Create time interval loop for cannon 
Time.setInterval(function (time) {
    if (lastTime !== undefined) {
        let dt = (time - lastTime) / 1000;
        world.step(fixedTimeStep, dt, maxSubSteps)

     // Get the head position values from the patches
     var headVal1 = Patches.getScalarValue("HeadPosX").pinLastValue();
     var headVal2 = Patches.getScalarValue("HeadPosY").pinLastValue();
     var headVal3 = Patches.getScalarValue("HeadPosZ").pinLastValue();

     // Set the position of the head hitbox to the headposition in the physics world
     HeadBody.position.x = headVal1;
     HeadBody.position.y = headVal2;
     HeadBody.position.z = headVal3;
   }

    lastTime = time
}, timeInterval);

此代码分别从我发送这些值的补丁中分别获取 x、y 和 z 值。我也可以从两侧将其作为 Vector3 完成,但我认为这看起来更好,并且可以更轻松地通过补丁单独编辑值,而不是再次将其打包为 Vector3。