Swift 你在哪里';行为';创建了存储在.rcproject中的Reality Composer?

Swift 你在哪里';行为';创建了存储在.rcproject中的Reality Composer?,swift,augmented-reality,arkit,realitykit,reality-composer,Swift,Augmented Reality,Arkit,Realitykit,Reality Composer,形势 我正在用xcode(11.3.1)制作AR应用程序。我已使用reality composer将对象(例如立方体)添加到场景中,并使用reality composer向这些对象添加了行为(例如,轻触、翻转和注视摄影机)。保存后,切换到ViewController.swift 在ViewController中,我加载Experience.rcproject并通过编写var-Box=try来访问默认的框场景!Experience.loadBox()。一切正常 然后我打印层次结构中的各种对象,以了

形势

我正在用xcode(11.3.1)制作AR应用程序。我已使用reality composer将对象(例如立方体)添加到场景中,并使用reality composer向这些对象添加了行为(例如,轻触、翻转和注视摄影机)。保存后,切换到
ViewController.swift

在ViewController中,我加载
Experience.rcproject
并通过编写
var-Box=try来访问默认的
场景!Experience.loadBox()
。一切正常

然后我打印层次结构中的各种对象,以了解它们是如何构造的。例如,我将编写
print(box)
,并查看所描述的所有实体和组件

问题

我可以看到位置等的
Transform
,以及网格、材质等的
ModelComponent
,这一切都是有意义的,但我看不到.rcproject在swift中变成的对象中行为的存储位置

例如,如果我添加了一个
look-at-camera
behavior-in-reality composer,我的假设是会有类似于“公告牌”的组件附加到该对象上,但我看不到应用了行为的对象与未应用行为的对象之间有任何区别

另一个例子是,将
点击并翻转
添加到一个对象后,我希望在对象中的某个位置找到一些动画信息,但我还是看不到它附加到对象上。我也无法在场景对象中的任何位置看到任何动画信息或行为组件

任何地方都知道我在哪里可以访问这些吗?在
box
下面似乎有一个名为
actions
的东西,但打印时只返回
Experience.box.actions
,而没有更多信息

我找错地方了吗?或者这些没有暴露?

部分溶液 您可以以某种非常有限的方式访问和重新创建
行为。为此,您需要在Reality Composer中的动作序列中包含具有明确名称的
Notify
动作

下面是RealityKit的代码:

class ViewController: UIViewController {
    
    @IBOutlet var arView: ARView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        let boxAnchor = try! Experience.loadBox()
        arView.scene.anchors.append(boxAnchor)

        boxAnchor.actions.repetitive.onAction = self.remodelling
    }
    
    fileprivate func remodelling(_ entity: Entity?) {

        guard let entity = entity else { return }
        entity.children[0].position.x = -0.25
        
        let modelEntity = entity.children[0] as! ModelEntity
        modelEntity.model?.mesh = .generateSphere(radius: 0.1)
        modelEntity.model?.materials = [UnlitMaterial(color: .green)]
    }
}

其中,
操作
实例属性为:

public private(set) lazy var actions: Actions { get set }
重复的
是:

public private(set) lazy var repetitive: Experience.NotifyAction { get set }
public var onAction: ((Entity?) -> Void)?
onAction
是:

public private(set) lazy var repetitive: Experience.NotifyAction { get set }
public var onAction: ((Entity?) -> Void)?

附加信息 以下是
actionsandehaviours.Experience.Box.Actions的不可编辑内容

import Combine
import Foundation
import RealityKit
import SwiftOnoneSupport
import UIKit
import simd

@available(iOS 13.0, macOS 10.15, *)
public enum Experience {

    public class NotifyAction {

        public let identifier: String

        public var onAction: ((Entity?) -> Void)?
    }

    public enum LoadRealityFileError : Error {

        case fileNotFound(String)
    }

    public static func loadBox() throws -> ActionsAndBehaviours.Experience.Box

    public static func loadBoxAsync(completion: @escaping (Result<ActionsAndBehaviours.Experience.Box, Error>) -> Void)

    public class Box : Entity, HasAnchoring {

        public var steelBox: Entity? { get }

        lazy public private(set) var actions: ActionsAndBehaviours.Experience.Box.Actions

        public class Actions {

            lazy public private(set) var repetitive: ActionsAndBehaviours.Experience.NotifyAction

            lazy public private(set) var allActions: [ActionsAndBehaviours.Experience.NotifyAction]
        }
    }
}
导入联合收割机
进口基金会
进口商品
进口迅捷支持
导入UIKit
进口单指令多数据
@可用(iOS 13.0、macOS 10.15、*)
公众普查经验{
公共集体诉讼{
公共let标识符:字符串
公共变量操作:((实体?->无效)?
}
公共枚举LoadRealityFileError:错误{
案例fileNotFound(字符串)
}
public static func loadBox()抛出->ActionsAndBehaviours.Experience.Box
公共静态func loadBoxAsync(完成:@escaping(Result)->Void)
公共类框:实体、属性{
public var steelBox:实体?{get}
惰性公私(set)var操作:ActionsAndBehaviours.Experience.Box.actions
公共集体诉讼{
lazy public-private(set)var重复:ActionsAndBehaviours.Experience.NotifyAction
惰性公私(set)变量allActions:[ActionsAndBehaviours.Experience.NotifyAction]
}
}
}

Hi AndyFedo,感谢您的回复,但是打印组件不会显示Reality Composer中添加的任何“行为”(例如动画或注视摄影机),也许它们不是组件?但如果没有,它们是什么,以及如何在场景对象中访问它们?感谢您提供的信息和YFEDO。我期待着未来的版本。谢谢你的片段,这很有帮助。