在 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.width
和CameraInfo.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.width
和 CameraInfo.previewSize.height
是 ScalarSignal
,而不是数字文字。)
Edit: Here's a link to the documentation: https://sparkar.facebook.com/ar-studio/learn/documentation/reference/classes/camerainfomodule
我开始使用 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.width
和CameraInfo.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.width
和 CameraInfo.previewSize.height
是 ScalarSignal
,而不是数字文字。)
Edit: Here's a link to the documentation: https://sparkar.facebook.com/ar-studio/learn/documentation/reference/classes/camerainfomodule