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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

1回答

408閲覧

Unityでサウンド管理クラスでサウンドが再生されない

harunasan

総合スコア125

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2018/02/19 17:16

【Unity】サウンド管理クラスの設計
を参考にしてサウンドを再生しようと思っているのですがうまくいきません。デバックするとサウンドをとれていないようです。
実装内容としまして。

GameManager.cs

C#

1 void Start () { 2 // サウンドをロード 3 // "bgm01"をロード。キーは"bgm"とする 4 Sound.LoadBgm("bgm", "pirupiru"); 5 } 6・・・ 7 8 Sound.PlaySe("bgm");

Sound.cs

C#

1using UnityEngine; 2using System.Collections; 3using System.Collections.Generic; 4 5/// サウンド管理 6public class Sound 7{ 8 9 /// SEチャンネル数 10 const int SE_CHANNEL = 4; 11 12 /// サウンド種別 13 enum eType 14 { 15 Bgm, // BGM 16 Se, // SE 17 } 18 19 // シングルトン 20 static Sound _singleton = null; 21 // インスタンス取得 22 public static Sound GetInstance() 23 { 24 return _singleton ?? (_singleton = new Sound()); 25 } 26 27 // サウンド再生のためのゲームオブジェクト 28 GameObject _object = null; 29 // サウンドリソース 30 AudioSource _sourceBgm = null; // BGM 31 AudioSource _sourceSeDefault = null; // SE (デフォルト) 32 AudioSource[] _sourceSeArray; // SE (チャンネル) 33 // BGMにアクセスするためのテーブル 34 Dictionary<string, _Data> _poolBgm = new Dictionary<string, _Data>(); 35 // SEにアクセスするためのテーブル 36 Dictionary<string, _Data> _poolSe = new Dictionary<string, _Data>(); 37 38 /// 保持するデータ 39 class _Data 40 { 41 /// アクセス用のキー 42 public string Key; 43 /// リソース名 44 public string ResName; 45 /// AudioClip 46 public AudioClip Clip; 47 48 /// コンストラクタ 49 public _Data(string key, string res) 50 { 51 Key = key; 52 ResName = "Sounds/" + res; 53 // AudioClipの取得 54 Clip = Resources.Load(ResName) as AudioClip; 55 } 56 } 57 58 /// コンストラクタ 59 public Sound() 60 { 61 // チャンネル確保 62 _sourceSeArray = new AudioSource[SE_CHANNEL]; 63 } 64 65 /// AudioSourceを取得する 66 AudioSource _GetAudioSource(eType type, int channel = -1) 67 { 68 if (_object == null) 69 { 70 // GameObjectがなければ作る 71 _object = new GameObject("Sound"); 72 // 破棄しないようにする 73 GameObject.DontDestroyOnLoad(_object); 74 // AudioSourceを作成 75 _sourceBgm = _object.AddComponent<AudioSource>(); 76 _sourceSeDefault = _object.AddComponent<AudioSource>(); 77 for (int i = 0; i < SE_CHANNEL; i++) 78 { 79 _sourceSeArray[i] = _object.AddComponent<AudioSource>(); 80 } 81 } 82 83 if (type == eType.Bgm) 84 { 85 // BGM 86 return _sourceBgm; 87 } 88 else 89 { 90 // SE 91 if (0 <= channel && channel < SE_CHANNEL) 92 { 93 // チャンネル指定 94 return _sourceSeArray[channel]; 95 } 96 else 97 { 98 // デフォルト 99 return _sourceSeDefault; 100 } 101 } 102 } 103 104 // サウンドのロード 105 // ※Resources/Soundsフォルダに配置すること 106 public static void LoadBgm(string key, string resName) 107 { 108 GetInstance()._LoadBgm(key, resName); 109 } 110 public static void LoadSe(string key, string resName) 111 { 112 GetInstance()._LoadSe(key, resName); 113 } 114 void _LoadBgm(string key, string resName) 115 { 116 if (_poolBgm.ContainsKey(key)) 117 { 118 // すでに登録済みなのでいったん消す 119 _poolBgm.Remove(key); 120 } 121 _poolBgm.Add(key, new _Data(key, resName)); 122 } 123 void _LoadSe(string key, string resName) 124 { 125 if (_poolSe.ContainsKey(key)) 126 { 127 // すでに登録済みなのでいったん消す 128 _poolSe.Remove(key); 129 } 130 _poolSe.Add(key, new _Data(key, resName)); 131 } 132 133 /// BGMの再生 134 /// ※事前にLoadBgmでロードしておくこと 135 public static bool PlayBgm(string key) 136 { 137 return GetInstance()._PlayBgm(key); 138 } 139 bool _PlayBgm(string key) 140 { 141 if (_poolBgm.ContainsKey(key) == false) 142 { 143 // 対応するキーがない 144 return false; 145 } 146 147 // いったん止める 148 _StopBgm(); 149 150 // リソースの取得 151 var _data = _poolBgm[key]; 152 153 // 再生 154 var source = _GetAudioSource(eType.Bgm); 155 source.loop = true; 156 source.clip = _data.Clip; 157 source.Play(); 158 159 return true; 160 } 161 /// BGMの停止 162 public static bool StopBgm() 163 { 164 return GetInstance()._StopBgm(); 165 } 166 bool _StopBgm() 167 { 168 _GetAudioSource(eType.Bgm).Stop(); 169 170 return true; 171 } 172 173 /// SEの再生 174 /// ※事前にLoadSeでロードしておくこと 175 public static bool PlaySe(string key, int channel = -1) 176 { 177 return GetInstance()._PlaySe(key, channel); 178 } 179 bool _PlaySe(string key, int channel = -1) 180 { 181 if (_poolSe.ContainsKey(key) == false) 182 { 183 // 対応するキーがない 184 return false; 185 } 186 187 // リソースの取得 188 var _data = _poolSe[key]; 189 190 if (0 <= channel && channel < SE_CHANNEL) 191 { 192 // チャンネル指定 193 var source = _GetAudioSource(eType.Se, channel); 194 source.clip = _data.Clip; 195 source.Play(); 196 } 197 else 198 { 199 // デフォルトで再生 200 var source = _GetAudioSource(eType.Se); 201 source.PlayOneShot(_data.Clip); 202 } 203 204 return true; 205 } 206}

![イメージ説明保存先]

以上です、ご協力をお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

Sound.LoadBgm("bgm", "pirupiru");

Sound.LoadSe("bgm", "pirupiru");
にしたらいけました、BGMでSEを再生しようとしていました・・・

投稿2018/02/19 17:30

harunasan

総合スコア125

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問