🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity3D

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

Q&A

解決済

1回答

1189閲覧

チュートリアルサイトでSoundManagerと言う名前のスクリプトの中に別のスクリプトからでもSEを鳴らせる関数書いたのですがそれを呼ぶコード(一行)が載っているのに理解力が無いため分からない

hosituka

総合スコア15

Unity3D

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

0グッド

0クリップ

投稿2021/02/10 08:11

編集2021/02/10 09:11

チュートリアルサイトでSoundManagerと言う名前のスクリプトの中に別のスクリプトからでもSEを鳴らせる関数書いたのですがそれ呼ぶためのコード(一行)が載っているのに理解力が無いため分からないです。
誰か知恵分けてくれるとありがたいです。 なんか投げやりでごめんなさい

そのチュートリアルサイトのURL


そのサイト

①のサイトがこの中にSoundManagerのコードがあるのでそれを書いてくださいと言ったサイト※著者は同じ
※なぜURLを二つ貼ったかと言うと①のサイトがSoundManagerのコードは、②のサイトの中にあると言われたので一応関係があると言うことで貼り付けましたちなみ①の方にはSoundManagerのコードは載ってませんが使い方は①にも載ってるし②にも載ってあります。

自分が見本にしているサイトの最初のページのURLも一応乗せときます。

ちなみにこのサイトはゲームジャンルごとにそのゲームのチュートリアルがあるのですが今その中からやっているのはコイン集めてUnityちゃんと言うやつです。

なんか関係ある物を貼り付けます※関係あるのを見逃している可能性もあるためURLを張りましたその時は優しくお願いします

チュートリアルサイトのURL①にあったSoundManagerの使い方

イメージ説明
チュートリアルサイトのURL②にあったSoundManagerの使い方

イメージ説明

SoundManagerのコードは、②の画像が貼ってあるサイトの中にしかないのですがそのスクリプトの使い方については①と②両方とも使い方が載っています。ですが何故か書いていることが違うため情報が新しいかつ多い①の方の画像にやれと言われている項目の確認

1:SoundManager.csをGameManagerオブジェクトにアタッチします。
イメージ説明

2:「Resources」フォルダ内に「Audio」フォルダを作り、その中にさらに「BGM」「SE」フォルダを作ります。
イメージ説明

3:ゲームで使うBGM素材や効果音素材を1.で作ったフォルダの中に入れます。 
今回はCoinをとった時、音出したいのでSEフォルダに入れました
イメージ説明

4:必要な場所からSoundManager.PlayBGM(orSE)ByName()を呼び出します
これをやりたいのですが理解力足らずで分からない

SoundManagerの中にある関数を当たったとき音を出すために呼び出そうとしているCoinスクリプト

C#

1using UnityEngine; 2 3public class Coin : MonoBehaviour 4{ 5 6 [SerializeField] 7 float rotateSpeed = 90.0f; 8 9 GameManager gameManager; 10 11 void Start() 12 { 13 gameManager = GameObject.FindWithTag("GameController").GetComponent<GameManager>(); 14 } 15 16 void Update() 17 { 18 transform.Rotate(Vector3.right * Time.deltaTime * rotateSpeed); 19 } 20 21 void OnCollisionEnter(Collision collision) 22 { 23 if (collision.gameObject.tag == "Player") 24 { 25 gameManager.Score += 1; 26 //ここにSoundManagerを使って音出したい 27 Destroy(gameObject); 28 } 29 } 30}

SoundManagerスクリプト

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class SoundManager : SingletonMonoBehaviour<SoundManager> 6{ 7 [SerializeField, Range(0, 1), Tooltip("マスタ音量")] 8 float volume = 1; 9 [SerializeField, Range(0, 1), Tooltip("BGMの音量")] 10 float bgmVolume = 1; 11 [SerializeField, Range(0, 1), Tooltip("SEの音量")] 12 float seVolume = 1; 13 14 AudioClip[] bgm; 15 AudioClip[] se; 16 17 Dictionary<string, int> bgmIndex = new Dictionary<string, int>(); 18 Dictionary<string, int> seIndex = new Dictionary<string, int>(); 19 20 AudioSource bgmAudioSource; 21 AudioSource seAudioSource; 22 23 public float Volume 24 { 25 set 26 { 27 volume = Mathf.Clamp01(value); 28 bgmAudioSource.volume = bgmVolume * volume; 29 seAudioSource.volume = seVolume * volume; 30 } 31 get 32 { 33 return volume; 34 } 35 } 36 37 public float BgmVolume 38 { 39 set 40 { 41 bgmVolume = Mathf.Clamp01(value); 42 bgmAudioSource.volume = bgmVolume * volume; 43 } 44 get 45 { 46 return bgmVolume; 47 } 48 } 49 50 public float SeVolume 51 { 52 set 53 { 54 seVolume = Mathf.Clamp01(value); 55 seAudioSource.volume = seVolume * volume; 56 } 57 get 58 { 59 return seVolume; 60 } 61 } 62 63 public void Awake() 64 { 65 if (this != Instance) 66 { 67 Destroy(gameObject); 68 return; 69 } 70 71 DontDestroyOnLoad(gameObject); 72 73 bgmAudioSource = gameObject.AddComponent<AudioSource>(); 74 seAudioSource = gameObject.AddComponent<AudioSource>(); 75 76 bgm = Resources.LoadAll<AudioClip>("Audio/BGM"); 77 se = Resources.LoadAll<AudioClip>("Audio/SE"); 78 79 for (int i = 0; i < bgm.Length; i++) 80 { 81 bgmIndex.Add(bgm[i].name, i); 82 } 83 84 for (int i = 0; i < se.Length; i++) 85 { 86 seIndex.Add(se[i].name, i); 87 } 88 } 89 90 public int GetBgmIndex(string name) 91 { 92 if (bgmIndex.ContainsKey(name)) 93 { 94 return bgmIndex[name]; 95 } 96 else 97 { 98 Debug.LogError("指定された名前のBGMファイルが存在しません。"); 99 return 0; 100 } 101 } 102 103 public int GetSeIndex(string name) 104 { 105 if (seIndex.ContainsKey(name)) 106 { 107 return seIndex[name]; 108 } 109 else 110 { 111 Debug.LogError("指定された名前のSEファイルが存在しません。"); 112 return 0; 113 } 114 } 115 116 //BGM再生 117 public void PlayBgm(int index) 118 { 119 index = Mathf.Clamp(index, 0, bgm.Length); 120 121 bgmAudioSource.clip = bgm[index]; 122 bgmAudioSource.loop = true; 123 bgmAudioSource.volume = BgmVolume * Volume; 124 bgmAudioSource.Play(); 125 } 126 127 public void PlayBgmByName(string name) 128 { 129 PlayBgm(GetBgmIndex(name)); 130 } 131 132 public void StopBgm() 133 { 134 bgmAudioSource.Stop(); 135 bgmAudioSource.clip = null; 136 } 137 138 //SE再生 139 public void PlaySe(int index) 140 { 141 index = Mathf.Clamp(index, 0, se.Length); 142 143 seAudioSource.PlayOneShot(se[index], SeVolume * Volume); 144 } 145 146 public void PlaySeByName(string name) 147 { 148 PlaySe(GetSeIndex(name)); 149 } 150 151 public void StopSe() 152 { 153 seAudioSource.Stop(); 154 seAudioSource.clip = null; 155 } 156 157}

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

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

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

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

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

hosituka

2021/02/10 09:06

書式のアドバイスを言ってくれるのはありがたいです。 そういう事が出来るのですね知識が増えましたありがとうございます。
K_3578

2021/02/10 09:14

@hosituka さん 自分も最近他の方に指摘頂いて知ったことなので・・・。 自分はUnityは分からないので回答は出来ませんが、これで回答を得る助けになれば なによりかと思います。
guest

回答1

0

ベストアンサー

SoundManager.Instance.PlaySeByName("Coin01");とかで鳴るんじゃないですかね。

SingletonMonoBehaviourを継承しているのでシングルトンなのが分かります。
説明すると長くなるのでざっくりいうと、シーンをまたいでも1個だけ必ず存在する存在みたいな感じです。

cs

1 if (this != Instance) 2 { 3 Destroy(gameObject); 4 return; 5 } 6 7 DontDestroyOnLoad(gameObject);

(例えばこの場合だとSoundManagerがあるシーンに何度も移動したら、そのたびにSoundManagerが増えていくことは避けたいです。なので常に1個になるようにInstanceとしてstaticなSoundManagerの参照をとっておいて、それと一致しないSoundManagerは消しています)

ということは、SoundManager.Instanceさんを呼び出せば、今存在するであろうSoundManagerを参照して利用することができます。

あとは利用ページに案内にあるようにPlayBgmByNameでBGMを再生、PlaySeByNameでSEを名前指定して再生できるそうなのでSoundManager.InstanceさんのPlaySeByNameを呼び出します。

SoundManager.Instance.PlaySeByName("Coin01"); となりました。

投稿2021/02/10 09:13

編集2021/02/10 09:26
hogefugapiyo

総合スコア3302

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

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

hosituka

2021/02/10 09:45

出来ました!これで先に進めますしかもわざわざ解説までくれるとはありがとうございます。 分からなかったとこも多かったため助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問