在 Spark AR studio 中获取像素屏幕大小(for Facebook)

Get the pixel screen size in Spark AR studio (for Facebook)

我开始使用 Spark AR studio,我正在寻找以像素为单位的屏幕尺寸,以比较通过点击 gesture.location 获得的坐标。

TouchGestures.onTap().subscribe((gesture) => {
  // ! The location is always specified in the screen coordinates
  Diagnostics.log(`Screen touch in pixel = { x:${gesture.location.x}, y: ${gesture.location.y} }`);

  // ????
});

gesture.location 以像素(屏幕坐标)为单位,想将其与屏幕尺寸进行比较以确定屏幕的哪一侧被触摸。

也许使用 Camera.focalPlane 是个好主意...

更新

我尝试了两种新方法来调整屏幕尺寸:

const CameraInfo = require('CameraInfo');
Diagnostics.log(CameraInfo.previewSize.height.pinLastValue());

const focalPlane = Scene.root.find('Camera').focalPlane;
Diagnostics.log(focalPlane.height.pinLastValue());

但是两者都return0

从场景部分将其拖到补丁编辑器后,可通过设备信息补丁输出获得屏幕尺寸。

最后,

在 Patch Editor 中使用设备信息并将其传递给脚本是可行的!

首先在编辑器中添加一个变量"to script":

然后,在补丁编辑器中创建:

你可以用这个脚本获取它:

const Patches = require('Patches');
const screenSize = Patches.getPoint2DValue('screenSize');

我的错误是使用 Diagnostic.log() 来检查我的变量是否正常工作。

改为使用Diagnostic.watch():

Diagnostic.watch('screenSize.x', screenSize.x);
Diagnostic.watch('screenSize.y', screenSize.y);

这个答案可能有点晚了,但对于那些正在寻找可以在脚本中轻松使用值的解决方案的人来说,这可能是一个很好的补充,我遇到了这段代码(不是我的,忘记保存 link):

var screen_height = 0;
Scene.root.find('screenCanvas').bounds.height.monitor({fireOnInitialValue: true}).subscribe(function (height) {
    screen_height = height.newValue;
});
var screen_width = 0;
Scene.root.find('screenCanvas').bounds.width.monitor({fireOnInitialValue: true}).subscribe(function (width) {
    screen_width = width.newValue;
});

这对我来说效果很好,因为我不知道如何使用 Diagnostics.log 而不是 Diagnostics.watch。

现在在公开测试版中(从 post 开始)您可以将设备从场景侧边栏拖到补丁编辑器中,以获得输出屏幕尺寸、屏幕比例和安全区域插入的补丁作为自我对象。 The Device patch

设备大小可以在分别使用CameraInfo.previewSize.widthCameraInfo.previewSize.height的脚本中使用。例如,如果你想获得代表屏幕上 min/max 点的 2d 点,这就可以了。

const CameraInfo = require('CameraInfo')
const Reactive = require('Reactive')

const min = Reactive.point2d(
  Reactive.val(0),
  Reactive.val(0)
)
const max = Reactive.point2d(
  CameraInfo.previewSize.width,
  CameraInfo.previewSize.height
)

(我想强调的一点是 CameraInfo.previewSize.widthCameraInfo.previewSize.heightScalarSignal,而不是数字文字。)

Edit: Here's a link to the documentation: https://sparkar.facebook.com/ar-studio/learn/documentation/reference/classes/camerainfomodule