[코드조각] [2] 오브젝트를 AR환경에 올리기

웰디(Well-D)·2025년 4월 14일
0

오브젝트를 올리는 코드조각

override func viewDidLoad() {
    super.viewDidLoad()
    // Set the view's delegate    sceneView.delegate = self
    // 씬 생성    let scene = SCNScene()
    // 씬 뷰에 SCNScene 인스턴스를 올림    sceneView.scene = scene
   // 인벤토리 버튼 추가    setupInventoryButton()
    // 제스처 인식기 추가    addGestureRecognizers()
}
 func loadUSDZModel(named modelName: String) {        
 // sceneView의 씬에서 루트 노드의 모든 자식 노드를 제거        
 // forEach 문으로 루트 노드의 모든 자식노드를 돌면서 씬의 루트 노드에 있는 모든 자식 노드를 제거함 
        sceneView.scene.rootNode.childNodes.forEach { 
        $0.removeFromParentNode() 
  }        
        guard let url = Bundle.main.url(forResource: "art.scnassets/\(modelName)", withExtension: "usdz"), let node = SCNReferenceNode(url: url) else { 
            print("USDZ 파일을 찾을 수 없습니다: \(modelName)")            
            return       
  }        
 // 일부 객체가 검게 보이는 현상이 있으므로 다시 조명추가해줌        
 // 씬에서 오브젝트를 갈아낄때 노드가 삭제되면서 조명(라이팅)이 제거된 것으로 보임        
 addLighting()        
 currentModelName = modelName
 // 소리를 재생합니다        
 playSound(modelName)        
 // 노드를 올립니다        
 node.load()        
 // Animated_fire 모델의 특성으로 z축으로 떨어져서 보내게 했습니다        
 node.position = SCNVector3(x: 0, y: 0, z: -15)        
 // 원하는 스케일로 조정        
 node.scale = SCNVector3(x: 0.15, y: 0.15, z: 0.15)        
 // 씬의 루트노드에 자식노드를 추가합니다        
 sceneView.scene.rootNode.addChildNode(node)        
 // 핀치 제스쳐 관련으로 selectedNode 속성을 사용했었으나 지금은 쓰지않음(일단 넣어뒀음 - 추후 삭제예정)        
 // selectedNode = node        
 // addAnimation(node: node)        
 originalScale = node.scale
  
 }
profile
Wellness 잘사는 것에 진심인 웰디입니다. 여러분의 몸과 마음, 통장의 건강을 수호하고싶어요. 느리더라도, 꾸준히

0개의 댓글