- Home /
Gunshot sound not playing when handgun is fired
I'm having problems whereas a gunshot sound is to be liked to weapon firing and that it simply does not work.
My script for handgun is as follows:
var range = 200.0; var fireRate = 0.05; var force = 10.0; var damage = 5.0; var bulletsPerClip = 40; var clips = 20; var reloadTime = 0.5; private var hitParticles : ParticleEmitter; var muzzleFlash : Renderer; var bulletsLeft : int = 0; var bulletPrefab : Transform; var gunSound : AudioClip; private var nextFireTime = 0.0; private var m_LastFrameShot = -1; function Start () { hitParticles = GetComponentInChildren ( ParticleEmitter ); // We don't want to emit particles all the time, only when we hit something.
if ( hitParticles )
hitParticles.emit = false;
bulletsLeft = bulletsPerClip;
}
function Update() { if ( Input.GetButtonDown ( "Fire1" ) ) { FireOneShot(); } }
function LateUpdate() { if ( muzzleFlash ) { // We shot this frame, enable the muzzle flash if ( m_LastFrameShot == Time.frameCount ) { muzzleFlash.transform.localRotation = Quaternion.AngleAxis ( Random.Range ( 0, 359 ), Vector3.forward ); muzzleFlash.enabled = true;
if ( audio ) { if ( !audio.isPlaying ) audio.Play();
audio.loop = true;
}
}
// We didn't, disable the muzzle flash
else
{
muzzleFlash.enabled = false;
enabled = false;
// Play sound
if ( audio )
{
audio.loop = false;
}
}
}
}
function Fire () { if ( bulletsLeft == 0 ) return;
// If there is more than one bullet between the last and this frame // Reset the nextFireTime if ( Time.time - fireRate > nextFireTime ) nextFireTime = Time.time - Time.deltaTime;
// Keep firing until we used up the fire time while ( nextFireTime < Time.time && bulletsLeft != 0 ) { FireOneShot(); nextFireTime += fireRate; } }
function FireOneShot () { var direction = transform.TransformDirection ( Vector3.forward ); var hit : RaycastHit; // Did we hit anything?
if ( Physics.Raycast ( transform.position, direction, hit, range ) )
{
// Apply a force to the rigidbody we hit if ( hit.rigidbody ) hit.rigidbody.AddForceAtPosition ( force * direction, hit.point );
// Place the particle system for spawing out of place where we hit the surface! // And spawn a couple of particles if ( hitParticles ) { hitParticles.transform.position = hit.point; hitParticles.transform.rotation = Quaternion.FromToRotation ( Vector3.up, hit.normal ); hitParticles.Emit(); }
// Send a damage message to the hit object hit.collider.SendMessageUpwards ( "ApplyDamage", damage, SendMessageOptions.DontRequireReceiver ); }
bulletsLeft--;
// Register that we shot this frame, // so that the LateUpdate function enabled the muzzleflash renderer for one frame m_LastFrameShot = Time.frameCount; enabled = true; // Reload gun in reload Time
if ( bulletsLeft == 0 )
Reload();
}
function Reload () { // Wait for reload time first - then add more bullets! yield WaitForSeconds ( reloadTime ); // We have a clip left reload
if ( clips > 0 ) { clips--; bulletsLeft = bulletsPerClip; }
}
function GetBulletsLeft () { return bulletsLeft; }
I've tried adding an audio source to the parent of handgun model but still does not work unless I check 'play on awake' to which only plays the sound once, even though the weapon hasn't been fired.
Also the handgun script comes with a variety of properties, one includes 'Gun Sound'. Gunshot sound has been linked to this property but still no response in regards to playing when weapon fires.
Any suggestions to how I can get this all working?
Much thanks.
Your answer
Follow this Question
Related Questions
Audio Playing upon death 1 Answer
FPS, Trying to add sound to footsteps, Not working! 2 Answers
Play sound from an array, not random, and only once 3 Answers
play sound on collecting pickUp Item 3 Answers
Audio signal plug-in? 1 Answer