@@ -45,17 +45,22 @@ public sealed class DynamicAudio : MonoBehaviour
45
45
private AudioClip [ ] _audioClips ;
46
46
#pragma warning restore IDE0044 // Add readonly modifier
47
47
48
+ /// <value>
49
+ /// The audio source property. If the field it is referencing is <see langword="null"/> then it adds a component.
50
+ /// </value>
51
+ public AudioSource AudioSource => _audioSource ??= gameObject . AddComponent < AudioSource > ( ) ;
52
+
48
53
/// <summary>
49
- /// The audio source.
54
+ /// The audio source field .
50
55
/// </summary>
51
56
[ SerializeField ]
52
57
private AudioSource _audioSource ;
53
58
54
59
/// <summary>
55
60
/// Returns the <see cref="AudioSource"/>.
56
61
/// </summary>
57
- /// <param name="dynamicAudio">The instance of <see cref="DynamicAudio"/> to retrieve <see cref="_audioSource "/> from.</param>
58
- public static explicit operator AudioSource ( DynamicAudio dynamicAudio ) => dynamicAudio . _audioSource ;
62
+ /// <param name="dynamicAudio">The instance of <see cref="DynamicAudio"/> to retrieve <see cref="AudioSource "/> from.</param>
63
+ public static explicit operator AudioSource ( DynamicAudio dynamicAudio ) => dynamicAudio . AudioSource ;
59
64
60
65
private Routine < float , float > _fade ;
61
66
@@ -65,9 +70,7 @@ private void Awake()
65
70
{
66
71
_fade = this . ToRoutine ( ( float from , float to ) => TweenFade ( from , to ) ) ;
67
72
68
- _audioSource = gameObject . AddComponent < AudioSource > ( ) ;
69
-
70
- _audioSource . playOnAwake = false ;
73
+ AudioSource . playOnAwake = false ;
71
74
72
75
StartCoroutine ( UpdateVolume ( ) ) ;
73
76
}
@@ -82,7 +85,7 @@ private void Awake()
82
85
/// <summary>
83
86
/// Pauses playing the clip.
84
87
/// </summary>
85
- public void Pause ( ) => _audioSource . Pause ( ) ;
88
+ public void Pause ( ) => AudioSource . Pause ( ) ;
86
89
87
90
/// <summary>
88
91
/// Plays a sound, with optional parameters.
@@ -100,15 +103,15 @@ public void Play(AudioClip clip, bool loop = false, int priority = 0, float dela
100
103
{
101
104
clip . NullCheck ( "You cannot play an audio clip which is null." ) ;
102
105
103
- _audioSource . clip = clip ;
104
- _audioSource . loop = loop ;
105
- _audioSource . priority = priority ;
106
- _audioSource . pitch = pitch ;
107
- _audioSource . time = time ;
106
+ AudioSource . clip = clip ;
107
+ AudioSource . loop = loop ;
108
+ AudioSource . priority = priority ;
109
+ AudioSource . pitch = pitch ;
110
+ AudioSource . time = time ;
108
111
109
112
_volume = volume ;
110
113
111
- _audioSource . PlayDelayed ( delay ) ;
114
+ AudioSource . PlayDelayed ( delay ) ;
112
115
}
113
116
114
117
/// <summary>
@@ -129,16 +132,16 @@ public void Play(AudioClip clip, bool loop = false, int priority = 0, float dela
129
132
/// <summary>
130
133
/// Stops playing the clip.
131
134
/// </summary>
132
- public void Stop ( ) => _audioSource . Stop ( ) ;
135
+ public void Stop ( ) => AudioSource . Stop ( ) ;
133
136
134
137
/// <summary>
135
138
/// Unpauses the paused playback of this <see cref="AudioSource"/>.
136
139
/// </summary>
137
- public void Unpause ( ) => _audioSource . UnPause ( ) ;
140
+ public void Unpause ( ) => AudioSource . UnPause ( ) ;
138
141
139
142
private IEnumerator TweenFade ( float to , float time )
140
143
{
141
- float current = 0 , from = _audioSource . volume ;
144
+ float current = 0 , from = AudioSource . volume ;
142
145
143
146
while ( current < time )
144
147
{
@@ -151,14 +154,14 @@ private IEnumerator TweenFade(float to, float time)
151
154
yield return null ;
152
155
}
153
156
154
- _audioSource . volume = to ;
157
+ AudioSource . volume = to ;
155
158
}
156
159
157
160
private IEnumerator UpdateVolume ( )
158
161
{
159
162
while ( true )
160
163
{
161
- _audioSource . volume = _volume * GameVolume / 100f ;
164
+ AudioSource . volume = _volume * GameVolume / 100f ;
162
165
yield return null ;
163
166
}
164
167
}
0 commit comments