返回博客首页
← 所有文章

原生脚本增强现实的预览

2017年9月12日 — 作者 Rob Lauer

随着 iOS 11 的正式发布,我们很高兴地宣布在 NativeScript 中提供增强现实 (AR) 支持的预览版!

 

Apple (ARKit) 和 Google (ARCore) 发布的 AR SDK 为 NativeScript 提供了一个机会,使开发人员能够创建沉浸式的跨平台 AR 体验。上面视频中的应用程序是使用我们即将发布的 nativescript-ar 插件的 alpha 版本创建的。目前,此插件利用 iOS 11 中提供的 ARKit API。在不久的将来,将通过 ARCore API 为 Android 添加支持。

虽然设备必须运行 iOS 11 才能使用 ARKit,但由于 NativeScript API 在运行时加载的方式,如果您使用 nativescript-ar 插件,您仍然可以定位 iOS 的较低版本。这意味着您可以向您的应用程序添加补充的 AR 功能,而不会影响 iOS <= 10 用户。

iOS 11 将支持 iPhone 6S 及更新的设备。

Android 上的 ARCore 则有所不同,因为 Google 将 ARCore 支持限制在运行在 Samsung Galaxy S8 和 Google Pixel 设备上的 Android 8(奥利奥)上。虽然支持肯定会扩大,但 Android 供应商更新到最新版本的 Android 的速度非常慢。

使用 AR 的规范方法是首先检测表面,然后在表面上(或上方)放置对象。这些对象可以是任何东西,从立方体和球体到使用数十万个多边形的完整 3D 模型。对象可以具有质量,因此重力可以影响它们。

正在为您的下一个 AR 项目寻找免费的 3D 模型存储库?请查看 turbosquid.com

一些代码如何?

我们 AR 插件的目标是消除不必要的平台特定混淆,并提供一个干净简洁的 API。使用起来非常简单,只需将 <AR></AR> 元素添加到您的视图中,并添加事件和属性来指导其行为。

<AR (arLoaded)="arLoaded($event)"
    (planeDetected)="planeDetected($event)"
    (planeTapped)="planeTapped($event)">
</AR>

<AR></AR> 元素可以是任何普通的 NativeScript 布局的一部分,或者您甚至可以全屏显示。在任何一种情况下,您都可以选择在其顶部覆盖其他标准 NativeScript UI 元素。

nativescript-ar 插件在 Angular 和原生 JavaScript NativeScript 应用程序中都能很好地工作!

使用 nativescript-ar 插件,您将能够捕获事件并以编程方式与屏幕上的相机馈送进行交互。例如,您可以使用以下方法获取平面被点击的坐标的通知:

<AR (planeTapped)="planeTapped($event)">

...然后将 planeTapped 事件转发到您的组件以(在此示例中)将树的 3D 模型添加到场景中的特定点。

planeTapped(position: ARPosition): void {
    this.ar.addModel({
        name: "tree.dae",
        position: position,
        scale: 0.01,
        mass: 0.0002,
        onLongPress: ((model: ARNode) => {
            model.remove();
        })
    });
}

ar tree

我什么时候可以得到它?

准备好了就来 😄。

nativescript-ar 插件目前正在积极开发中。当我们发布第一个版本时,它将仅支持 ARKit,因为 Android 上的 ARCore 推出存在上述延迟。但是,ARKit 和 ARCore API 相对相似,在开发过程中,我们始终牢记整体占用空间,以确保我们的抽象是真正跨平台的。

无论如何,由于这两个 SDK 的 API 表面很大(并且感谢 NativeScript 的功能),开发人员始终能够利用更模糊的平台特定 API,如果它们没有通过插件公开。

在 Progress,我们对移动设备上增强现实的未来感到非常兴奋,并且很高兴 NativeScript 正在帮助引领这一潮流。