- Home /
'FPS Tutorial' Machine Gun Script not working
I am using the 'FPS Tutorial' "Machine Gun" script, and it doesn't seem to be working. There are no error messages, no particles (I attached one as a child). Is there something wrong with it, or is it my game?
Here's the script:
var range = 100.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;
private var bulletsLeft : int = 0; 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 LateUpdate() { if (muzzleFlash) { // We shot this frame, enable the muzzle flash if (m_LastFrameShot == Time.frameCount) { muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward); muzzleFlash.enabled = true;
if (audio) {
if (!audio.isPlaying)
audio.Play();
audio.loop = true;
}
} else {
// We didn't, disable the muzzle flash
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
clips -= 1;
bulletsLeft = bulletsPerClip;
}
function GetBulletsLeft () { return bulletsLeft; }
Answer by andrew 3 · Feb 05, 2011 at 02:26 AM
the most likely problem is that your machine gun that you have false on a lot of things in this script one idea is that your gun is shooting but every thing is set to false so that the muzzle flash the hit particles and the sound is false so you dont here or see it the other idea is that you dont have bullet prefab check but that is vary unlikely one again like the other guy i would need to see it in action to tell witch problem it is or if is nether problem i hope this helped you.
Answer by gamer · Feb 01, 2011 at 05:08 AM
maybe put out the script or your game online so i can have more information on answering it
Got what? Did you get it working (in which case, please close question) or you got it online (in which case, please post link)?
I meant the script is here. I found the reason why: the PlayerWeapon script wasn't attached, so the script didn't get input to fire. Thanks for the help, guys.
Answer by zmar0519 · Feb 05, 2011 at 01:29 AM
There is probably something wrong with the game. In your start function, you have the line hitParticles = GetComponentInChildren(ParticleEmitter);
, which would find your particle emitter that you attached as a child. If you are using the fps tutorial that unity technologies made, then there should be an fpsPlayer prefab (Not to be mistaken with the fpsControllerPrefab or anything else like that) that already has the machine gun and the rocket launcher attached and functional.
I've imported the machine gun and the muzzle flash, and it isn't working. I've also tried shooting at a rigidbody, and that isn't working.
Answer by YeOldeSnake 1 · Feb 05, 2011 at 10:16 AM
You might have it set up incorrectly , check your values , if you have bulletsperclip set to 0 for example it may not work
Answer by user-3061 (yahoo) · Feb 07, 2011 at 07:41 AM
you mean that you got everything else working ( raycast apply damage, enemies shooting you/ walking ) except the particles? Try re-positioning your particle prefab in front of your gun to see if that helps
Your answer
Follow this Question
Related Questions
How can I make robot fire a machine gun? 1 Answer
cant get my gun to work 0 Answers
is there anything wrong with this script 1 Answer
Problems implementing sound for machine gun enemy: 2 Answers