質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ARKit

ARKitは、iPhone/iPad向けのARアプリ用フレームワーク。iOS11以降に標準搭載されています。これを用いたARアプリは、特殊なデバイスがなくてもiPhone/iPadの単眼カメラを使用して動作することが可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

821閲覧

RealityKitで追加したオブジェクト同士が一致するかの判定を行いたい

hodoru3sei

総合スコア284

ARKit

ARKitは、iPhone/iPad向けのARアプリ用フレームワーク。iOS11以降に標準搭載されています。これを用いたARアプリは、特殊なデバイスがなくてもiPhone/iPadの単眼カメラを使用して動作することが可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/04/01 06:54

## 実現したいこと
ARで表示しているオブジェクトを2つ選択して1つ目に選択したものと、2つ目に選択したものを判定して表示されている3Dモデルが同一であるかの判定を行いたい

困っていること

オブジェクトが同一であるかの判定をおこなうのにEntityの保持しているどのプロパティを使って判定を行えば良いのかわからず困っています。

コード

現在はARで台座の上にusdzのモデルを表示してそのモデルをタップするところまでできています。
コードは以下です。

import UIKit import RealityKit import Combine class ViewController: UIViewController { @IBOutlet var arView: ARView! var daizas:[Entity] = [] override func viewDidLoad() { super.viewDidLoad() let anchor:AnchorEntity = AnchorEntity(plane: .horizontal,minimumBounds: [0.2, 0.2]) arView.scene.addAnchor(anchor) //台座の作成 for _ in 1...4 { let box = MeshResource.generateBox(width: 0.04, height: 0.002, depth: 0.04) let metalMaterial = SimpleMaterial(color: .gray, isMetallic: true) let model = ModelEntity(mesh: box, materials: [metalMaterial]) model.generateCollisionShapes(recursive: true) daizas.append(model) } for (index, daiza) in daizas.enumerated() { let x = Float(index % 4) let z = Float(index / 4) daiza.position = [x * 0.1, 0, z * 0.1] anchor.addChild(daiza) } var cancellable: AnyCancellable? = nil //TODO: モデルのサイズがバラバラになってしまっているので統一する cancellable = ModelEntity.loadModelAsync(named: "01") .append(ModelEntity.loadModelAsync(named: "02")) .collect() .sink(receiveCompletion: { error in print("error:(error)") cancellable?.cancel() }, receiveValue: { entities in var objects: [ModelEntity] = [] for entity in entities { entity.setScale(SIMD3<Float>(0.002, 0.002, 0.002),relativeTo: anchor) entity.generateCollisionShapes(recursive: true) for _ in 1...2 { objects.append(entity.clone(recursive: true)) } } //台座にARオブジェクトを追加する for (index, object) in objects.enumerated() { self.daizas[index].addChild(object) } cancellable?.cancel() }) } @IBAction func tapObject(_ sender: UITapGestureRecognizer) { let tapLogation = sender.location(in: arView) if let object = arView.entity(at: tapLogation) { // ここで選択したものが一致しているかを判定したい } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問