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

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

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

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

0回答

605閲覧

イメージアンカーの名前を使用して、種類ごとに異なる動画を再生したい。

water_lily

総合スコア4

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/01/31 11:51

編集2020/02/04 03:49

前提・実現したいこと

スマホ向けARアプリを制作しています。
あらかじめマーカとなる画像をいくつか登録しておき、スマホカメラで画像を認識すると、画像の種類に応じて異なる動画を再生するようにしたいと思っております。
現時点では、どのマーカを読み取っても"最高速度.MP4"という特定の動画しか再生できていません。
"最高速度"という部分を読み取ったマーカの名前と同じにしておくと紐付けされた適当な動画が再生できると考えております。そこで、ソースコードの//ビデオプレーヤ作成1にあります、guard let videoURL = Bundle.main.url(forResource: "最高速度",
withExtension: "mp4")の"最高速度"の位置に適切な変数を配置したいと思うのですが、どのように変数を配置すれば良いでしょうか?

該当箇所

let name = imageAnchor.referenceImage.name! videoURL = Bundle.main.url(forResource: "最高速度", withExtension: "mp4")

該当のソースコード

// MARK: ARImageの認識 private func setupImageDetection() { imageConfiguration = ARImageTrackingConfiguration() guard let referenceImages = ARReferenceImage.referenceImages( inGroupNamed: "AR Images", bundle: nil) else { fatalError("Missing expected asset catalog resources.") } imageConfiguration?.trackingImages = referenceImages } extension ViewController: ARSCNViewDelegate { func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { DispatchQueue.main.async { self.instructionLabel.isHidden = true } if let imageAnchor = anchor as? ARImageAnchor { handleFoundImage(imageAnchor, node) } else if let objectAnchor = anchor as? ARObjectAnchor { handleFoundObject(objectAnchor, node) } } private func handleFoundImage(_ imageAnchor: ARImageAnchor, _ node: SCNNode) { let name = imageAnchor.referenceImage.name!//←imageAnchorに登録されている画像の名前を取り出す。 print("you found a (name) image") let size = imageAnchor.referenceImage.physicalSize if let videoNode = makeDinosaurVideo(size: size) { node.addChildNode(videoNode) node.opacity = 1 } } //ビデオプレーヤの作成 private func makeDinosaurVideo(size: CGSize) -> SCNNode? { // 1 guard let videoURL = Bundle.main.url(forResource: "最高速度", withExtension: "mp4") else { return nil } // 2 let avPlayerItem = AVPlayerItem(url: videoURL) let avPlayer = AVPlayer(playerItem: avPlayerItem) avPlayer.play() // 3 NotificationCenter.default.addObserver( forName: .AVPlayerItemDidPlayToEndTime, object: nil, queue: nil) { notification in avPlayer.seek(to: .zero) avPlayer.play() } // 4 let avMaterial = SCNMaterial() avMaterial.diffuse.contents = avPlayer // 5 let videoPlane = SCNPlane(width: size.width, height: size.height) videoPlane.materials = [avMaterial] // 6 let videoNode = SCNNode(geometry: videoPlane) videoNode.eulerAngles.x = -.pi / 2 return videoNode }

試したこと

該当部分の二箇所が特に重要なところだと目をつけています。nameというもので画像の名前を確認しています。このnameを使うことで、ImageAnchorと同じ名前のMP4を再生できると考えております。
https://tutorialmore.com/questions-602576.htm
こちらのサイトを参考にして変更を試みましたが
//ビデオプレーヤ作成の1//の"最高速度"の部分を変数nameにしてみましたがエラーメッセージが表示されました。
nameを確認している箇所とビデをを作成しているprivate funcが異なるためnameをどのように使えるようにすればいいのかわかりません。
nameをreturnで返すことができればnameをうまく使えそうな気がするのですが、どうすればいいでしょうか?お力添えよろしくお願いします。

補足情報(FW/ツールのバージョンなど)

Xcode バージョン11.0
ios13.1向け

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

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

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

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

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

fiveHundred

2020/02/03 06:20

「<<<至急>>>」と書いても逆効果です。
Zuishin

2020/02/03 13:00

「至急」は「他の人の質問はほっといて自分の質問を優先しろ」という身勝手な思いが見えるから「どうせ話の通じないやつなんだろうな」と思うので回答することはありません。私だけではないと思います。
water_lily

2020/02/04 03:52

不適切な表現をしてしまい申し訳ありません。
hoshi-takanori

2020/02/08 04:53

「どのように変数を配置すれば良いでしょうか?」というご質問ですが、変数(や、関数やメソッドの引数)の使い方はプログラミングの基礎なので、まずはプログラミングの勉強をしっかりされることをお勧めします。 これだけだと不親切なのでもうちょっとヒントを書くと、認識したものの名前がhandleFoundImageのnameという変数に入るはずですよね。まずこの中身を確認しましょう。そして、その値に応じて異なる動画を表示したいのだと思いますが、具体的にnameが何だったらどの動画を表示するかを決めます。で、makeDinosaurVideoの "最高速度" となっている部分をそれに合わせて変更するにはどうすればいいかを考えてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問