Swift 当锚重新出现在视频屏幕中时,使AR实体重新出现
使用iOS14.2、XCode12.1、Swift5.3、 我在Xcode项目中的第一次AR体验运行得很好 在reality composer中,我定义了一个类型为“image”的锚点,并在其XY中心放置了一个3D对象。此外,我还添加了一个小的行为动画,使3D对象在触摸时翻转,并立即发送触摸通知事件。这一切在我的应用程序中运行得非常好 然而,我想做一些下一步,不知道如何实现这一点 特别是:下面列表中的第3步我不知道如何做:Swift 当锚重新出现在视频屏幕中时,使AR实体重新出现,swift,xcode,arkit,scene,realitykit,Swift,Xcode,Arkit,Scene,Realitykit,使用iOS14.2、XCode12.1、Swift5.3、 我在Xcode项目中的第一次AR体验运行得很好 在reality composer中,我定义了一个类型为“image”的锚点,并在其XY中心放置了一个3D对象。此外,我还添加了一个小的行为动画,使3D对象在触摸时翻转,并立即发送触摸通知事件。这一切在我的应用程序中运行得非常好 然而,我想做一些下一步,不知道如何实现这一点 特别是:下面列表中的第3步我不知道如何做: 轻触AR对象并使其翻转 使对象在翻转动画后消失 一旦相机再次移动到定位图
isEnabled=false
来完成的
此外,还需要某种触发器来再次取消隐藏实体对象。
在这里,它是通过一个简单的目标动作手势点击方法完成的。当然,您可以选择不同的机制来取消实体对象的隐藏
据我所知,如果给定的锚类型(如图像或对象)重新进入摄影机字段,则在现实中不可能触发测量
以下是解决方案代码:
import UIKit
import RealityKit
class MySceneViewController: UIViewController {
@IBOutlet weak var arView: ARView!
private var myEntity: Entity?
override func viewDidLoad() {
super.viewDidLoad()
let myScene1Anchor = try! MyScene1.loadScene()
arView.scene.anchors.append(myScene1Anchor)
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
arView.addGestureRecognizer(tap)
// Register an onAction handler for the notification
// action "tearTouched" you created in Reality Composer
myScene1Anchor.actions.tearTouched.onAction = handleTapOnEntity(_:)
}
@objc func handleTap(_ sender: UITapGestureRecognizer? = nil) {
self.myEntity?.isEnabled = true
}
func handleTapOnEntity(_ entity: Entity?) {
guard let entity = entity else { return }
self.myEntity = entity
self.myEntity?.isEnabled = false
}
}
import UIKit
import RealityKit
class MySceneViewController: UIViewController {
@IBOutlet weak var arView: ARView!
private var myEntity: Entity?
override func viewDidLoad() {
super.viewDidLoad()
let myScene1Anchor = try! MyScene1.loadScene()
arView.scene.anchors.append(myScene1Anchor)
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
arView.addGestureRecognizer(tap)
// Register an onAction handler for the notification
// action "tearTouched" you created in Reality Composer
myScene1Anchor.actions.tearTouched.onAction = handleTapOnEntity(_:)
}
@objc func handleTap(_ sender: UITapGestureRecognizer? = nil) {
self.myEntity?.isEnabled = true
}
func handleTapOnEntity(_ entity: Entity?) {
guard let entity = entity else { return }
self.myEntity = entity
self.myEntity?.isEnabled = false
}
}