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

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

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

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

376閲覧

UnityからiOSのAVAudioPlayerを呼び出したい

ko-ki-mv

総合スコア0

Swift

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2023/01/25 18:35

前提

Unityを使いアプリを作っています。
その際、ネイティブの音声再生を使用することとなりました。
UnityからSwiftをpluginとして読み込んでいます。
UnityからSwift上のメソッドを呼び出すことまでは成功したのですが、音が出ません

該当コード

Test.h

1import Foundation 2import AVFoundation 3 4 5@objc public class Test : NSObject { 6 7 @objc public static func play() { 8 9 var player: AVAudioPlayer? 10 11 if let soundURL = Bundle.main.url(forResource: "sound", withExtension: "wav") { 12 do { 13 player = try AVAudioPlayer(contentsOf: soundURL) 14 player?.play() 15 print("play") 16 } catch { 17 print("error") 18 } 19 } 20 } 21}

問題点

上記コードで"play"がprintされるところまでは確認しています。
Playingで状態を調べたところ、Trueを示したので内部的には再生されているものと思われます。

これは予想としてですが、Viewとこの音声が結びついていないことが原因ではないかと思っています。ですが、Swiftの知識が薄く解決方法が見出せません。

その他の解決策含め、何か知識をいただけると嬉しいです。

Version

Unity: 2021.3.16f1
x-code: 14.2

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

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

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

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

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

hoshi-takanori

2023/01/26 01:26

var player が play メソッドのローカル変数になってるからでは。(static メソッドになってるけど、インスタンスの管理どうするんだろう?)
ko-ki-mv

2023/01/26 02:24

Swift上のローカル・グローバル変数の扱いについて知見が深くないのですが、player?.playは正常に動作していました。それでは不十分ということですかね? おそらくインスタンス化していると思うのでStaticは好ましくなさそうです。 申し訳ないのですが、Swiftの仕組み・ライフスケジュールに詳しくないので曖昧な回答になっています。
hoshi-takanori

2023/01/28 05:01

player がローカル変数なので、その関数を抜ける時に解放されてしまい、再生が停止するため音が鳴りません。Swift のアプリなら UIViewController などのプロパティにすれば画面が表示されている間は player が生存して音が鳴りますが、Unity から利用する場合は Unity 側でインスタンスを管理する必要があるかと…。 https://qiita.com/mao_/items/07466e169d08cbeff221
ko-ki-mv

2023/02/01 04:37

回答ありがとうございます。Unity側でインスタンスを管理とありましたがその方法がいまいちわかっておらず苦戦しています。こちらでももう少し調べる予定なのですが、もし他に文献などありましたら教えていただけると幸いです。
hoshi-takanori

2023/02/01 04:49

自分は Unity のことは詳しくないので…。一般的にクロスプラットフォームの開発ツールで特定の環境に依存した処理をしようとすると、結局両方 (この場合は Unity と Swift) に詳しくなる必要があったりします。頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問