因此,我将一个Reality Composer文件"Experience"加载到一个包含三个场景的XCode项目中.

我已经添加了在XCode中工作的行为和动作.操作非常完美,当我点击不同的对象时,隐藏并显示另外两个场景.

但在一个名为"立方体"的场景中,我添加了两个立方体.我将这两个立方体归类为"两个立方体",根据苹果的文档,它们现在的行为将像一个对象:

您可以将场景中的多个资源合并为一个组.成组 在现实composer 的场景中,对象表现为单个组合对象 查看.

这个场景没有相关的动作,I only wanted to make the two cubes draggable and scalable when I pinch.我还没能做到这一点.即使我以不同的方式命名每个立方体,也没有任何react .

我怀疑这与对象分组时发生的事情有关[参考苹果文档here],但我还没有找到解决方案.我看了这方面的专家《天才Andy Jazz》给出的很多答案,但一无所获.我这样做是因为我有一个更大的模型,我正在开发我自己的应用程序,每个场景大约有20个子元素…所以我希望我能在这里想出一个解决方案,以后我可以用来做更大的事情……

see the two cubes to the right

screenshot of the Reality Composer scenes

我try 了多个现实合成器模型,在手机上查看现实文件时可以拖动,但当我将场景导入Xcode模型时,这一功能被删除了.

我什么都试过了,包括一个立方体...拖拽也不起作用.

import UIKit
import RealityKit

class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let boxAnchor = try! Experience.loadBox()
        arView.scene.anchors.append(boxAnchor)
        
        let cubesAnchor = try! Experience.loadCubes()
        arView.scene.anchors.append(cubesAnchor)
                   
        guard let addingGestures = cubesAnchor.twoCubes as? ModelEntity else { return }
        addingGestures.generateCollisionShapes(recursive: true)
        arView.installGestures([.all], for: addingGestures as (Entity & HasCollision))            
        
        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0){
            self.arView.scene.anchors.removeAll()
            let coneAnchor = try! Experience.loadCone()
            self.arView.scene.anchors.append(coneAnchor)                
            print(coneAnchor)                
        }
        
        func handleTapOnEntity(_ entity: Entity?) {
            guard let entity = entity else { return }  
        }
    }
}

请参阅相关问题here

推荐答案

What Models Grouping actually means

在现实中的Composer和RealityKit中,将几个对象组合在一起意味着在单个父对象(即parenting个OP)下合并几个子对象.分组的对象可以使用其父实体同 timeshift 动、旋转和zoom .但是,这不能应用于物理,或者换句话说,碰撞、各种动力、光线投射和三种类型的RealityKit手势(EntiyGestureRecognizer).

正如你所写的,这在docs中有明确的表述.

如果已在场景中启用物理功能,则分组的对象仍表现为单独的单独对象.

因此,如果在Reality Composer中对模型进行分组,则在对组应用相应的panpinch手势时,无法将两个立方体设置为draggable/scalable.不过,有一个解决方法.

解决方法

在RealityKit中,创建一个空组作为ModelEntity.使其CollisionShape大于这两个模型.在这种情况下,您可以使用panrotatepinch手势同时控制多个对象.您可以将collision shape生成为boxspherecapsuleconvex.也可以从separate parts创建碰撞形状.

import UIKit
import RealityKit

class ViewController: UIViewController {
    @IBOutlet var arView: ARView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.arView.debugOptions = .showPhysics
        
        let sph01 = ModelEntity(mesh: .generateSphere(radius: 0.05))
        sph01.position.x = -0.1
        let sph02 = ModelEntity(mesh: .generateSphere(radius: 0.05))
        sph02.position.x = 0.1
    
        let group = ModelEntity() as ModelEntity & HasCollision
        group.addChild(sph01)
        group.addChild(sph02)
        
        group.generateCollisionShapes(recursive: false)
        self.arView.installGestures(.all, for: group)
        
        let shape = ShapeResource.generateSphere(radius: 0.16)
        let collision = CollisionComponent(shapes: [shape],
                                             mode: .trigger,
                                           filter: .sensor)    
        group.components.set(collision)
        
        let anchor = AnchorEntity()
        anchor.addChild(group)
        anchor.scale = [5,5,5]
        arView.scene.anchors.append(anchor)    
    }
}

enter image description here

Swift相关问答推荐

自定义完整屏幕封面动画

数据不会被ARC删除在swift'

如何禁用MacOS上SwiftUI中按钮周围的聚焦环(或高亮显示)?

如何在visionOS中定制悬停效果区域

格式化单位和度量值.为什么从符号初始化的单位不能产生与静态初始化相同的结果

从后台线程获取@发布属性的值(不更改它)是正确的吗?

编写Swift字符串的属性包装时遇到问题

为什么要在SWIFT RandomAccessCollection协议中重新定义元素类型?

在不传递参数的情况下使用Init方法?

避免 `(())` 显式指定 Void 类型的枚举关联值

从文字创建数组时的 Swift 宏

从 actor 的 init 方法调用方法

在 Swift 中为(递归)扩展提供默认实例参数

SwiftUI View Builder 参数无法更改状态

我们如何显示关于 UITextField 是 xCode Swift 的建议?

无法推断泛型参数的参数

使用 Swift 以编程方式自定义 UITableViewCell

类型myViewController不符合 Swift 中的协议 UIPIckerDataSource

Swift 中的 recursiveDescription 方法?

swift中的匿名类