- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
代码 extension ARAnchor: Codable {}
产生错误:
“'Decodable' 的实现无法在类型不同的文件的扩展中自动合成”。
这是什么意思?我能够以类似的方式为另一种 native 类型实现 Codable
,没有任何错误。
最佳答案
您可以创建一个实现 Codable
的容器对象,然后使用它来编码和解码 anchor 。我在 Playground 上试过这段代码,它对我有用。您需要根据需要从 anchor 获得的数据对其进行调整;例如,我编码了 name
但这对你来说可能没用,如果你的 anchor 是在没有名字的情况下初始化的,它甚至可能会中断。您也可以使用 simd_float4x4
做同样的事情。
import Foundation
import ARKit
class AnchorContainer: Codable {
let anchor: ARAnchor
init(anchor: ARAnchor) {
self.anchor = anchor
}
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let name = try container.decode(String.self, forKey: .name)
let transform0 = try container.decode(simd_float4.self, forKey: .transform0)
let transform1 = try container.decode(simd_float4.self, forKey: .transform1)
let transform2 = try container.decode(simd_float4.self, forKey: .transform2)
let transform3 = try container.decode(simd_float4.self, forKey: .transform3)
let matrix = simd_float4x4(columns: (transform0, transform1, transform2, transform3))
anchor = ARAnchor(name: name, transform: matrix)
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(anchor.name, forKey: .name) // Might want to make sure that the name is not nil here
try container.encode(anchor.transform.columns.0, forKey: .transform0)
try container.encode(anchor.transform.columns.1, forKey: .transform1)
try container.encode(anchor.transform.columns.2, forKey: .transform2)
try container.encode(anchor.transform.columns.3, forKey: .transform3)
}
enum CodingKeys: String, CodingKey {
case name
case transform0
case transform1
case transform2
case transform3
}
}
// EXAMPLE:
let anchor = ARAnchor(name: "Bill", transform: simd_float4x4(float4(repeating: 4), float4(repeating: 5), float4(repeating: 6), float4(repeating: 7))) // Make a arbitrary anchor
print(anchor) // Figure out what it's value is
do {
let data = try JSONEncoder().encode(AnchorContainer(anchor: anchor))
let anchorDecode = try JSONDecoder().decode(AnchorContainer.self, from: data)
print(anchorDecode.anchor) // Print the value after decoding to make sure that the result is the same
} catch {
print(error.localizedDescription)
}
关于swift - 为 ARAnchor : "cannot be automatically synthesized in an extension..." 实现 Codable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55677651/
我正在尝试使用新的 ARKit 来替换我拥有的另一个类似的解决方案。真是太棒了!但我似乎无法弄清楚如何以编程方式移动 ARAnchor。我想慢慢地将 anchor 移动到用户的左侧。 在用户前方 2
我正在试验 SpriteKit 和 ARKit,想知道如何计算同一场景中两个 ARAnchor 之间的角度。 这意味着获取 anchor 在世界上的位置并计算它们定义的线与水平面(或另一个任意平面)的
我有一个应用程序使用 ARImageAnchor 来通过相机检测图像。我注意到,虽然场景节点在 3D 空间中的位置会实时更新,但节点的方向(xyz 旋转)可能需要几秒钟才能更新。任何附加的场景节点在更
在将 SCNNode 添加到 ARSCNView 的场景后,我试图获取 anchor 。我的理解是应该自动创建 anchor ,但我似乎无法检索它。 下面是我添加它的方法。该节点保存在一个名为 tes
我在使用 ARSKView 的 ARkit 项目中遇到了障碍。 我想在屏幕上使用点击并创建 ARAnchor 时实现,多个 SKNodes 将从同一个 anchor 弹出。由于我需要单独与每个节点交互
你好,我是使用 ARKit 进行开发的新手,所以这可能是一个基本问题,但我可以将 ARAnchor 附加到移动的物体上,比如打印出来的条形码吗? 我正在尝试开发一个应用程序,其中不同的对象应该显示在不
我目前正在开发 ARKit 2.0 应用程序,用户需要在映射空间周围找到虚拟对象,我使用了 AR Persistence 并且我意识到在初始 ARWorldMap 重新定位后,所有对象都会立即出现,即
When application launched first a vertical surface is detected on one wall than camera focus to the
我正在使用 XCode 9 上的 AR 入门应用,其中 anchor 是在点击场景中创建的: override func touchesBegan(_ touches: Set, with event
我目前正在用 RealityKit 做一些实验。 我一直在查看一些示例代码,我对 ARAnchor 和 AnchorEntity 之间的区别以及何时使用其中一个感到有点困惑. 到目前为止我知道: 两者
在 ARKit 中,我们可以通过 .showFeaturePoints 类型属性可视化在 ARSession 中检测到的 Feature Points' Cloud: self.sceneView.d
这几天我一直在努力解决这个问题。 给定一个基于 ARKit 的应用程序,我可以在其中跟踪用户的面部,我如何才能从它的 anchor 获得面部的绝对旋转? 我可以获得 ARAnchor 的变换,它是一个
如何使 ARNode 指向 ARAnchor? 我想使用 art.scnassets/ship.scn 显示在屏幕中央并指向我刚刚放置在场景中某处的对象。 /// ViewController Cla
问题: 如何创建一个与 ARObjectAnchor.referenceObject 具有相同高度和宽度的新 SKSpriteNode。 上下文: 我目前正在摆弄 ARKit 的新对象检测功能,并且有
我正在使用 WWDC 2018 中推出的 ARKit 2.0 测试 Apple 的多用户 AR 演示应用程序:Creating a multiuser AR experience . 文档说,在每个设
我正在尝试将 ARAnchor 投影到 2D 空间,但我面临方向问题... 在我将左上角、右上角、左下角、右下角位置投影到二维空间的函数下面: /// Returns the projection o
我在我的项目中使用 ARAnchor,我想从这个 anchor 获取位置 (3D)。 代码: sceneView.session.currentFrame?.anchors.first?.transf
我正在使用ARSessionDelegate在 ARView我在其中初始化 ARBodyTrackingConfiguration . session方法 didAdd: [ARAnchor]和 di
我有下一个代码: guard let feauturePoint = frame.hitTest(normalizedPoint, types: .featurePoint).first?.w
我需要将多个不同的 ARWorldMap 实例组合在一起。换句话说,我需要使用 ARWorldMap 的两个(或更多)实例的组合 anchor 创建一个实例。 我可以在整个应用程序中共享同一个实例,但
我是一名优秀的程序员,十分优秀!