Swift 你在哪里';行为';创建了存储在.rcproject中的Reality Composer?
形势 我正在用xcode(11.3.1)制作AR应用程序。我已使用reality composer将对象(例如立方体)添加到场景中,并使用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()。一切正常 然后我打印层次结构中的各种对象,以了
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。我期待着未来的版本。谢谢你的片段,这很有帮助。