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

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

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

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

18782閲覧

外部の音声データを読み込んでUnityで鳴らす方法

natsumikan4729

総合スコア19

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

1グッド

2クリップ

投稿2016/09/24 08:22

編集2016/09/24 08:37

###前提・実現したいこと

まだunity始めたばかりの者です。

ファイルにあるたくさんの音声データをそのまま読み込んでオブジェクトで鳴らしたいのですが、やり方を詳しく教えていただけませんか?

###発生している問題・エラーメッセージ

外部ファイルにある音声データを手動ではなく、スクリプトでunity内で鳴らせない。

###試したこと
WWW.audioClip を使おうとしましたが、使い方がわかりませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
Unity5.4 JavaScript

usamino👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

Resoucesフォルダを使うとスクリプトから音声を取得できますがJavascriptでの書き方がわからないので適当に変換して使ってください。似たような内容の回答もしましたのでこちらも見てみてください。
https://teratail.com/questions/48887

###使い方説明 下準備

  1. Resourcesフォルダを適当な場所に作成
  2. 読み出したいサウンドファイルを制作したフォルダ内に配置

仮にbird1.mp3、bird2.mp3、bird3.mp3、bird4.mp3としておきます。
準備完了
今後も使いそうでしたらわかりやすいようにResources/bird_voicesなどのフォルダを作ってその中に入れてもいいと思います。とりあえず今回は入れている程で進めます。

###実装
・サウンドの配置場所を以下と仮定して進めます。
Resources/bird_voices/bird1.mp3
Resources/bird_voices/bird2.mp3
Resources/bird_voices/bird3.mp3
Resources/bird_voices/bird4.mp3

###サウンド名を指定するパターン

C#

1using UnityEngine; 2using System.Collections; 3 4public class birdManager : MonoBehaviour { 5 6 //鳥のプレハブをセット 7 //※ AudioSourceコンポーネントをつけ忘れないように注意 8 [SerializeField] 9 GameObject birdPrefab; 10 11 //サウンドが保存されている場所のパス 12 string birdFolder = "bird_voices/"; 13 //サウンドの名前 14 string[] birdVoiceName = new string[4] 15 { 16 "bird1", 17 "bird2", 18 "bird3", 19 "bird4" 20 }; 21 22 void Awake() 23 { 24 //10回ほどループしてみます。 25 for (int i = 0; i < 10; i++) 26 { 27 GameObject obj = Instantiate(birdPrefab,new Vector3(Random.Range(1,100),Random.Range(7,10),Random.Range(1,100)), Quaternion.identity) as GameObject; 28 AudioSource source = obj.GetComponent<AudioSource>(); 29 //Resources.Loadでサウンドをロード ()内は画像名をパスから指定 30 source.clip = Resources.Load<AudioClip>(birdFolder + birdVoiceName[Random.Range(0,birdVoiceName.Length)]); 31 source.Play(); 32 } 33 } 34}

###サウンド名を自動で取得するパターン

C#

1using UnityEngine; 2using System.Collections; 3 4public class birdManager : MonoBehaviour { 5 6 [SerializeField] 7 //鳥のプレハブをセット 8 //※ AudioSourceをつけ忘れないように注意 9 GameObject birdPrefab; 10 11 //サウンドが保存されている場所のパス 12 string birdFolder = "bird_voices/"; 13 14 void Awake() 15 { 16 //とりあえず10回ほどループ 17 for (int i = 0; i < 10; i++) 18 { 19 GameObject obj = Instantiate(birdPrefab,new Vector3(Random.Range(1,100),Random.Range(7,10),Random.Range(1,100)), Quaternion.identity) as GameObject; 20 AudioSource source = obj.GetComponent<AudioSource>(); 21 //Resources.LoadAllですべてのサウンドを取得 ()内はファルダ名 22 AudioClip[] clips = Resources.LoadAll<AudioClip>(birdFolder); 23 source.clip = clips[Random.Range(0,clips.Length)]; 24 source.Play(); 25 } 26 } 27}

###Resoucesフォルダの注意点などはこちら
https://teratail.com/questions/48887

投稿2016/09/24 09:42

編集2016/09/24 10:00
IShix

総合スコア1724

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

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

natsumikan4729

2016/09/24 10:49

詳しい解説ありがとうございました!! とても助かります。 これに沿ってやってみます。 またわからないことがあれば質問しますので、よろしくお願いします。
natsumikan4729

2016/09/25 07:38

IShikawanさん 無事動きました!! ソースにまでわかりやすい解説をいただき、本当にありがとうございました。
IShix

2016/09/25 09:14

そうですか、よかったです。 ちなみにですが、Resources.Loadは同期処理なので音声ファイルが長かったりすると全体の処理を止めてしまいます。その場合はResources.LoadAsyncという非同期タイプもあるのでもし処理が止まることがあれば試してみてもいいかもしれません。 そして、大きなお世話かもしれませんが、UnityのJavascriptはJavascriptでは無いです。まだ始めたばかりでしたらすぐ挽回できると思うのでC#をお勧めします。僕が始めたばかりのころJavascriptの良いところがまったく使えないということを開発途中で知ってコードをすべてC#で書き直したことがあります。経験者は語るです。。。
natsumikan4729

2016/09/25 09:27

貴重なアドバイスありがとうございます!! そうなんですね。 最初はひよこ本をつかって始めましたので、Javascriptに・・・ C#のほうが解説も多くちょうど変えようかと思ったところです。 なので、C#をはじめてみます!
IShix

2016/09/25 09:44

僕と同じパターンですね(笑) なので僕も始めはJavascriptでした。ひよこ本はUnityの仕組みをしっかり学べるのでいいですよね。 UnityのJavascriptとC#の使い方は近いのですぐ慣れると思いますが、ひっかるのが配列の扱いとCorutine(JavascriptでいうところのsetTimeout)だと思います。そのあたり難しければまた質問してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問