我有一个自定义的usdz文件(不是通过代码创建的,而是一把真实的的椅子!)我把它保存在Entity
中。
一旦我有了它,这就是我的代码:
func updateUIView(_ uiView: ARView, context: Context) {
if let modelEntity = model.modelEntity {
print("\(model.modelName)")
let anchorEntity = AnchorEntity(plane: .horizontal)
anchorEntity.addChild(modelEntity.clone(recursive: true))
uiView.scene.addAnchor(anchorEntity)
// modelEntity.generateCollisionShapes(recursive: true)
// If we have multiple object, recursive true help to generate collision for all of them
uiView.installGestures(.rotation, for: modelEntity as! Entity & HasCollision)
uiView.debugOptions = .showPhysics
} else {
print("Unable to load modelEntity for \(model.modelName)")
}
}
这里的问题是“参数类型'Entity'不符合预期的类型'HasCollision'”。所以我不能添加任何手势。
但是我找不到任何有用的资源来实现我的最终目标。有什么建议吗?
3条答案
按热度按时间23c0lvtd1#
我还有别的情况:我需要从
.usdz
文件加载模型,它应该有一个动画。但我也需要有像平移和旋转这样的手势。研究指导我找到了正确答案的线程。我将在下面展示它的代码,主要思想是“将加载的实体嵌套在ModelEntity中,该实体具有动画,然后基于加载的模型的边界为该ModelEntity提供适当的CollisionComponent。”(c)ljsrvy3e2#
使用强制形式的向下转换(类型转换)
as!
和Entity & HasCollision
。或者这样:
installGestures(_:for:)
如下所示:Reality Composer中的初始设置
编译之前,在Reality Composer中为模型设置
physics = participates
、motion type = fixed
和accessibility = accessibility enabled
。完整代码版本
附言。
此外,这篇文章将向您展示光线投射如何与RealityKit手势结合使用。
ar7v8xwq3#
问题是您试图给予ModelEntity一个它不具备的能力(它没有冲突处理程序)。
您需要自己创建一个实体,它将符合HasCollision。
我会尝试这样的方法: