46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| 
 | |
| [RequireComponent(typeof(Rigidbody))]
 | |
| public class CollisionSfx : MonoBehaviour {
 | |
|     public LayerMask Mask;
 | |
|     public AudioClip[] Clips;
 | |
|     public AudioSource Source;
 | |
|     public float EffectCooldown;
 | |
|     [Tooltip("When the game starts, a lot of sticks drop (because they spawn). This is the amount of time that the stick should stay silent after spawning.")]
 | |
|     public float WaitUntilSfxAtGameStart;
 | |
| 
 | |
|     private Rigidbody Body;
 | |
|     private float LastTimePlayed = 0;
 | |
| 
 | |
|     private static float LastTimeGloballyPlayed = 0;
 | |
|     private static readonly float GlobalCooldown = 0.05f;
 | |
| 
 | |
|     private void Awake() {
 | |
|         Body = GetComponent<Rigidbody>();
 | |
|     }
 | |
| 
 | |
|     private void Start() {
 | |
|         LastTimePlayed = Time.time + WaitUntilSfxAtGameStart;
 | |
|     }
 | |
| 
 | |
|     private bool PlaySound() {
 | |
|         if (Time.time - LastTimePlayed >= EffectCooldown && Time.time - LastTimeGloballyPlayed >= GlobalCooldown) {
 | |
|             LastTimePlayed = Time.time;
 | |
|             LastTimeGloballyPlayed = Time.time;
 | |
|             if (Clips.Length > 0) {
 | |
|                 Source.PlayOneShot(Clips[Random.Range(0, Clips.Length)], Mathf.Sqrt(Body.velocity.magnitude));
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     private void OnCollisionEnter(Collision collision) {
 | |
|         if (((1 << collision.gameObject.layer) & Mask.value) != 0) {
 | |
|             PlaySound();
 | |
|         }
 | |
|     }
 | |
| }
 |