ARResourceにあるScreenprintingという名前の画像を読み込んだら画像上にBOXが出現するコードですが、BOXは画像に乗っている状態でした。乗っているのではなく、画像の真ん中から浮いているように指定したいです。Nodeの座標位置などをいじりましたが変わらず、大きさしか変わりませんでした。どうしたら画像から浮かせることができるのでしょうか?
参考 リンク内容
###コード
import UIKit import ARKit import Scenekit class boxViewController: UIViewController { @IBOutlet var sceneView: ARSCNView! let defaultConfiguration: ARWorldTrackingConfiguration = { let configuration = ARWorldTrackingConfiguration() let images = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) configuration.detectionImages = images configuration.maximumNumberOfTrackedImages = 1 return configuration }() private var boxNode: SCNNode! private let box = UIImpactFeedbackGenerator override func viewDidLoad() { super.viewDidLoad() sceneView.delegate = self boxNode = SCNScene(named: "art.scnassets/Scenekit _box.scn")!.rootNode.childNode(withName: "box", recursively: false } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) sceneView.session.run(defaultConfiguration) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) sceneView.session.pause() } extension boxViewController: ARSCNViewDelegate { func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? { guard let imageAnchor = anchor as? ARImageAnchor else { return nil } switch imageAnchor.referenceImage.name { case "Screenprinting" : DispatchQueue.main.async { self.feedback.impactOccurred() } boxNode.scale = SCNVector3(0.1, 0.1, 0.1) let scale1 = SCNAction.scale(to: 1.5, duration: 0.2) let scale2 = SCNAction.scale(to: 1, duration: 0.1) scale2.timingMode = .easeOut let group = SCNAction.sequence([scale1, scale2]) boxNode.runAction(group) default: return nil } } }
環境:xcode12 、swift5
以下の点をご確認頂けますと回答が付きやすくなると思うので、質問の修正・追記をご検討願います。
・ご提示頂いたコードだとビルドエラーとなる。コード修正願います。
・「Nodeの座標位置などをいじりましたが」とあるが、コード内だと指定している形跡がない。SCNファイル内で直接座標を調節したという意味でしょうか?質問に追記願います。
※座標位置調整する場合、「boxNode.position = SCNVector3(x:0.0, y:0.2, z:0.0)」の様な処理があると思うのですが、その様な処理がなかったため。
コード修正致しました。
座標調整について→はい、SCNファイル内のposition、Eulerなどを触りました。
回答1件
あなたの回答
tips
プレビュー