Performance: Playing sound effects
This affects the responsiveness and smoothness of audio playback during gameplay, impacting user experience and interaction speed.
Jump into concepts and practice - no test required
Use a pre-existing AudioSource component and call audioSource.PlayOneShot(soundEffectClip);AudioSource.PlayClipAtPoint(soundEffectClip, transform.position);
| Pattern | CPU Usage | Memory Allocations | Frame Drops | Verdict |
|---|---|---|---|---|
| PlayClipAtPoint (new AudioSource each time) | High | High | Likely | [X] Bad |
| PlayOneShot on reused AudioSource | Low | Minimal | Unlikely | [OK] Good |
AudioSource.Play() plays the assigned clip but can interrupt sounds if called repeatedly.AudioSource.PlayOneShot() plays a clip once without stopping other sounds.AudioSource audioSource;.new AudioSource() is not used directly; AudioSource() is not a constructor; assigning AudioClip to AudioSource variable is invalid.public class SoundTest : MonoBehaviour {
public AudioSource audioSource;
public AudioClip clip;
void Start() {
audioSource.PlayOneShot(clip);
audioSource.PlayOneShot(clip);
}
}PlayOneShot plays the clip immediately without stopping other sounds, allowing overlap.public class PlaySound : MonoBehaviour {
public AudioSource audioSource;
public AudioClip clip;
void Update() {
if (Input.GetKeyDown(KeyCode.Space)) {
audioSource.Play(clip);
}
}
}AudioSource.Play() does not accept parameters; it plays the assigned clip only.AudioSource.PlayOneShot(clip) to play a clip passed as argument.public AudioSource audioSource;
public AudioClip jumpSound;
public AudioClip hitSound;
void PlayJump() {
// ???
}
void PlayHit() {
// ???
}PlayOneShot() allows playing multiple clips without interrupting each other.audioSource.PlayOneShot(jumpSound); in PlayJump and audioSource.PlayOneShot(hitSound); in PlayHit. uses PlayOneShot correctly; Assign audioSource.clip = jumpSound; then call audioSource.Play(); in PlayJump; same for hitSound in PlayHit. overwrites clip and may cut sounds; Create new AudioSource for each sound effect and call Play() on each. is inefficient; Use audioSource.Play(); without assigning clips. plays nothing.