回答編集履歴

3

画像の追加

2023/11/26 02:31

投稿

fiveHundred
fiveHundred

スコア10037

test CHANGED
@@ -90,3 +90,5 @@
90
90
  }
91
91
  }
92
92
  ```
93
+
94
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-11-26/f95228dc-36f9-4175-8b90-a1b87163ecfa.png)

2

指摘修正

2023/11/25 05:31

投稿

fiveHundred
fiveHundred

スコア10037

test CHANGED
@@ -15,7 +15,8 @@
15
15
  BGMManagerにスライダーをアサインするのではなく、スライダーのスクリプトを作ってそちらからBGMManagerを参照するほうがいいと思います。
16
16
  また、「BGMのあるオブジェクト」を破棄したくない(コメント参照)ので、新しいほうが破棄する形にしています。
17
17
  使用する際は、BGMSliderをスライダーのゲームオブジェクトにアタッチしてください。
18
- また、スライダーに登録する関数を``BGMManager.SetBGMVolume()``から``BGMSlider.SetBGMVolume()``に変更してください。
18
+ また、**スライダーに登録する関数を``BGMManager.SetBGMVolume()``から``BGMSlider.SetBGMVolume()``に変更してください。**
19
+ (スライダーに直接、BGMManager.SetBGMVolume()を登録しないでください)
19
20
  動作未確認なので、エラーや不具合は適宜修正してください。
20
21
 
21
22
  ```C#

1

コードを追加

2023/11/23 12:57

投稿

fiveHundred
fiveHundred

スコア10037

test CHANGED
@@ -8,3 +8,84 @@
8
8
  ```C#
9
9
  Destroy(Instance.audioSourceBGM); // 既存のBGMを停止
10
10
  ```
11
+
12
+ ---
13
+
14
+ 追記:
15
+ BGMManagerにスライダーをアサインするのではなく、スライダーのスクリプトを作ってそちらからBGMManagerを参照するほうがいいと思います。
16
+ また、「BGMのあるオブジェクト」を破棄したくない(コメント参照)ので、新しいほうが破棄する形にしています。
17
+ 使用する際は、BGMSliderをスライダーのゲームオブジェクトにアタッチしてください。
18
+ また、スライダーに登録する関数を``BGMManager.SetBGMVolume()``から``BGMSlider.SetBGMVolume()``に変更してください。
19
+ 動作未確認なので、エラーや不具合は適宜修正してください。
20
+
21
+ ```C#
22
+ using UnityEngine;
23
+ using UnityEngine.UI;
24
+
25
+ public class BGMManager : MonoBehaviour
26
+ {
27
+ private AudioSource audioSourceBGM;
28
+ public AudioClip bgm;
29
+
30
+ public static BGMManager Instance;
31
+
32
+ private void Awake()
33
+ {
34
+ if (Instance == null)
35
+ {
36
+ Instance = this;
37
+ DontDestroyOnLoad(gameObject);
38
+
39
+ audioSourceBGM = gameObject.AddComponent<AudioSource>();
40
+ audioSourceBGM.loop = true;
41
+ audioSourceBGM.clip = bgm;
42
+ audioSourceBGM.Play();
43
+ }
44
+ else
45
+ {
46
+ // すでに存在する場合は即座に破棄する
47
+ Destroy(gameObject);
48
+ }
49
+ }
50
+
51
+ public void PlayBGM()
52
+ {
53
+ if (!audioSourceBGM.isPlaying)
54
+ {
55
+ audioSourceBGM.Play();
56
+ }
57
+ }
58
+
59
+ // BGMSliderから呼び出す用
60
+ // ※こちらはスライダーに直接登録しない。代わりにBGMSliderのSetBGMVolume()を登録する
61
+ public void SetBGMVolume(float volume)
62
+ {
63
+ audioSourceBGM.volume = volume;
64
+ }
65
+
66
+ // BGMSliderから呼び出す用
67
+ public float GetBGMVolume()
68
+ {
69
+ return audioSourceBGM.volume;
70
+ }
71
+ }
72
+ ```
73
+
74
+ ```C#
75
+ using UnityEngine;
76
+ using UnityEngine.UI;
77
+
78
+ public class BGMSlider : MonoBehaviour
79
+ {
80
+ private void Start()
81
+ {
82
+ GetComponent<Slider>().value = BGMManager.Instance.GetBGMVolume();
83
+ }
84
+
85
+ // こちらをスライダーに登録
86
+ public void SetBGMVolume(float volume)
87
+ {
88
+ BGMManager.Instance.SetBGMVolume(volume);
89
+ }
90
+ }
91
+ ```