[swift] Scenekit / ARkit上にdaeファイルからモデルを読み込んで追加する
Scenekit / ARkit上にdaeファイルからモデルを読み込んで追加するコードは以下の通り
インターネット上ではdaeファイルを追加するにはIDを指定してモデルデータを取得する必要があるとの記載が多いが、scene!.rootNode.childNodes[0]でモデルデータが取得できる。
これで複数のdaeファイルのモデルIDをいちいち記述する必要がなくなる。
ただし、xcodeでdaeファイル内のモデルIDの順番が一番上以外にあると、モデルが読み込めないので、必ずモデルIDが一番上になるようにしておくこと
↓これではモデルが読み込めないので、xcode上でドラッグアンドドロップで順番を入れ替えること

↓入れ替えた後

以下、ソースコード
override func viewDidLoad() {
super.viewDidLoad()
var scene = SCNScene() //カメラや光源などの設定は省略
//ボールdaeファイルのパス
let ball = "art.scnassets/gun.dae"
//ガンモデルをシーンに追加
scene.rootNode.addChildNode(createObject(position: SCNVector3Make(0, 0.1, 0), restitution: 1.0, filepath: ball))
}
//daeモデルを生成
func createObject(position:SCNVector3, restitution:CGFloat,filepath:String) -> SCNNode {
let scene = SCNScene(named: filepath)
let node: SCNNode = scene!.rootNode.childNodes[0]
let aModelShape = SCNPhysicsShape(node: node, options: nil)
let physicsBody = SCNPhysicsBody(type: .dynamic, shape: aModelShape)
physicsBody.restitution = restitution
node.physicsBody = physicsBody
node.position = position
return node
}
ただしこのままだとテクスチャが貼られていないモデルが出現するので、xcode上でdaeファイルの出現させてたいモデルを選択

右ペインの「Materials」という丸マークのタブを開き、「Diffuse」に貼りたいテクスチャを選択しておく。
コード上でnodeのmaterialでイメージを貼り付けても良い
let material = SCNMaterial() material.diffuse.contents = UIImage(named: "art.scnassets/textures/handgun_C.jpg") node.geometry?.firstMaterial = material
コードでテクスチャを貼るやり方を探していました!
ぜんぜん見つからないところ、ここに来て助かりました
ありがとうございます!