ARView

540 阅读6分钟

ARView

这个视图用于通过 RealityKit 呈现增强现实体验。 使用“ARView”实例向用户显示渲染的3D图形。您通常会将单个视图添加到应用程序的故事板中,然后在代码中为该视图提供一个出口。或者,您可以像在运行时以编程方式创建视图并将其添加到视图层次结构中,就像任何其他视图一样。

视图有一个场景实例,您可以通过只读场景属性访问。在视图的场景实例中,您可以添加一个或多个AnchorEntity实例,这些实例告诉视图的AR会话如何将内容与现实世界中的内容联系起来。在每个锚点上,您附加构成场景内容的其他实体实例的层次结构。

image.png

此外,您可以使用该视图来:

  • 配置渲染选项、环境特征和相机模式。
  • 以鼠标、键盘或手势输入的形式处理适合平台的用户交互。
  • 在视图中查找给定点的实体。
  • 访问帮助您调试应用程序的统计数据和可视化。

Creating a View

init(frame: CGRect)

使用指定维度创建AR视图。

init(frame: CGRect, cameraMode: ARView.CameraMode, automaticallyConfigureSession: Bool)

使用指定尺寸、相机模式和会话配置状态创建AR视图。

init?(coder: NSCoder)

从给定解码器中的数据初始化的AR视图。

typealias ARViewBase

RealityKit呈现内容的视图的平台特定基类。

处理场景

var scene: Scene

视图渲染和模拟的场景。

class Scene

包含AR视图呈现的实体集合的容器。

Configuring the AR Session

var session: ARSession

支持视图渲染的AR会话。

var automaticallyConfigureSession: Bool

指示是否使用自动配置的AR会话。

var renderOptions: ARView.RenderOptions

配置视图AR会话的渲染选项。

struct ARView.RenderOptions

您用于选择性地禁用某些渲染效果的可用渲染选项。

提供环境背景

var environment: ARView.Environment

视图的背景、照明和声学特性。

struct ARView.Environment

对视图内容的背景、照明和声学属性的描述。

var physicsOrigin: Entity?

定义场景物理模拟起源的实体。。

var audioListener: Entity?

定义空间音频听众位置和方向的实体。

管理相机

var cameraMode: ARView.CameraMode

在AR会话的相机和虚拟会话之间进行选择的设置。

enum ARView.CameraMode

可用的相机模式。

case ar

使用由AR会话管理的设备的相机。

case nonAR

使用虚拟相机。

var cameraTransform: Transform

当前有源相机的转换。

在视图中查找实体

func entity(at: CGPoint) -> Entity?

找到离指定点最近的AR场景中的实体。

func entities(at: CGPoint) -> [Entity]

在场景的指定点找到实体集合。

func hitTest(CGPoint, query: CollisionCastQueryType, mask: CollisionGroup) -> [CollisionCastHit]

根据查询和冲突掩码搜索与视图中点对应的对象。

func hitTest(CGPoint, types: ARHitTestResult.ResultType) -> [ARHitTestResult]

根据一组结果类型搜索与视图中点对应的对象。

func makeRaycastQuery(from: CGPoint, allowing: ARRaycastQuery.Target, alignment: ARRaycastQuery.TargetAlignment) -> ARRaycastQuery?

创建来自视图中以相机视野为中心的光线投射查询。

func raycast(from: CGPoint, allowing: ARRaycastQuery.Target, alignment: ARRaycastQuery.TargetAlignment) -> [ARRaycastResult]

执行光线投射,即光线从相机中心通过视图中的某个点投射到场景中,并立即返回结果。

func trackedRaycast(from: CGPoint, allowing: ARRaycastQuery.Target, alignment: ARRaycastQuery.TargetAlignment, updateHandler: ([ARRaycastResult]) -> Void) -> ARTrackedRaycast?

执行跟踪光线投射,即光线从相机中央通过视图中的某个点投射到场景中。

向实体添加手势识别器

func installGestures(ARView.EntityGestures, for: HasCollision) -> [EntityGestureRecognizer]

在给定的实体上安装标准手势,配置为同时识别。

struct ARView.EntityGestures

一组可能的实体手势识别器。

func gestureRecognizer(UIGestureRecognizer, shouldRecognizeSimultaneouslyWith: UIGestureRecognizer) -> Bool

确定两个手势识别器是否应该同时识别一个手势。

class EntityRotationGestureRecognizer

使用涉及两次触摸的旋转手势来旋转给定实体的手势识别器。

class EntityScaleGestureRecognizer

使用捏合手势缩放或缩放实体的手势识别器。

class EntityTranslationGestureRecognizer

使用平移手势移动实体的手势识别器。

protocol EntityGestureRecognizer

一种适用于实体的手势识别器。

坐标空间之间的映射

func project(SIMD3<Float>) -> CGPoint?

从场景的3D世界坐标系到视图的2D像素坐标系投出一个点。

func unproject(CGPoint, ontoPlane: float4x4) -> SIMD3<Float>?

将2D点从视图坐标系映射到3D空间的给定平面上。

func unproject(CGPoint, viewport: CGRect) -> SIMD3<Float>?

将2D点从视口的像素坐标系统映射到3D坐标空间。

func unproject(CGPoint, ontoPlane: float4x4, relativeToCamera: Bool) -> SIMD3<Float>?

将2D点从视口的像素坐标系统映射到3D坐标空间。

func ray(through: CGPoint) -> (origin: SIMD3<Float>, direction: SIMD3<Float>)?

在视图的二维空间中确定光线通过给定点的位置和方向。

处理触摸输入

func touchesBegan(Set<UITouch>, with: UIEvent?)

告诉视图发生了一个或多个新的触摸。

func touchesMoved(Set<UITouch>, with: UIEvent?)

当与事件关联的一个或多个触摸发生变化时,告诉视图。

func touchesEnded(Set<UITouch>, with: UIEvent?)

当一个或多个手指从视图中抬起时,告诉视图。

func touchesCancelled(Set<UITouch>, with: UIEvent?)

当系统事件(如系统警报)取消触摸序列时,告诉视图。

处理键盘输入

var acceptsFirstResponder: Bool

一个布尔值,指示视图是否接受第一响应者状态。

func keyDown(with: NSEvent)

通知视图用户按下了键。

func keyUp(with: NSEvent)

通知视图用户已释放键。

处理鼠标输入

func mouseDown(with: NSEvent)

告知视图用户已按下鼠标左键。

func mouseDragged(with: NSEvent)

通知视图用户按下左键移动鼠标。

func mouseUp(with: NSEvent)

告知视图用户已松开鼠标左键。

func mouseMoved(with: NSEvent)

通知视图鼠标已移动。

func rightMouseDown(with: NSEvent)

通知视图用户已按下鼠标右键。

func rightMouseDragged(with: NSEvent)

通知视图用户按下右键移动鼠标。

func rightMouseUp(with: NSEvent)

通知视图用户已松开鼠标右键。

func otherMouseDown(with: NSEvent)

通知视图用户按下了鼠标按钮以外的左侧或右侧按钮。

func otherMouseDragged(with: NSEvent)

通知视图,用户按下了左按钮或右按钮以外的按钮移动鼠标。

func otherMouseUp(with: NSEvent)

告知视图,用户已发布左侧或右侧按钮以外的鼠标按钮。

func scrollWheel(with: NSEvent)

通知视图鼠标的滚动轮已移动。

管理视图

var frame: NSRect

框架矩形,描述视图在父视图的坐标系统中的位置和大小。

var contentScaleFactor: CGFloat

视图中内容的缩放因子。

func didMoveToSuperview()

告诉视图它的超视图发生了变化。

func didMoveToWindow()

告诉视图其窗口属性设置为新值。

func layoutSubviews()

布局子视图。

class var layerClass: AnyClass

用于为视图实例创建图层的类。

func makeBackingLayer() -> CALayer

创建视图的备份层。

func viewDidChangeBackingProperties()

告诉视图其备份存储属性何时更改。

func viewDidMoveToSuperview()

告诉视图它有一个新的超级视图,或者视图的超级视图已被删除。

ARSCNView

这个视图让您可以利用 SceneKit 呈现增强现实体验。

ARSKView

这个视图让您可以利用 SpriteKit 呈现 AR 体验。