x


is there anything wrong with this script

this is a machine gun script that i put into the gun on my game but the gun does not work. im not sure what is wrong with it but i want to make sure if there is any thing wrong with the script below.

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 if (clips > 0) { clips--; bulletsLeft = bulletsPerClip; } }

more ▼

asked Apr 05, 2012 at 09:08 PM

infectedgamer51 gravatar image

infectedgamer51
29 40 29 31

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

Well, this is the widely known MachineGun.js script, from the old and good FPS Tutorial. You should follow the instructions of that tutorial, because this script is closely related to the gun model: it should have muzzle flash model attached to the gun, and you should drag this muzzle model to the field muzzleFlash in the Inspector. You should also add an AudioSource to your gun and set its clip to the shot sound you prefer. To fire, you must call the function Fire in this script, or (like in the tutorial) call it with BroadcastMessage("Fire") from the player script. Additionally, you should add a ApplyDamage(damage: float) function to your enemies, because this function will be called by the script above when something is hit. Finally, you should have a particle effect childed to the weapon. In a brief: read the tutorial instructions! You will learn a lot!

more ▼

answered Apr 05, 2012 at 09:31 PM

aldonaletto gravatar image

aldonaletto
57.9k 34 97 311

i did all of that but still nothing happens

Apr 05, 2012 at 10:06 PM infectedgamer51

How are you firing? You could add the following code to the script above:

function Update(){
  if (Input.GetMouseButton(0)){ // shoot pressing the left mouse button
    Fire();
  }
}
Apr 05, 2012 at 11:16 PM aldonaletto

where exactly should that be added?

Apr 06, 2012 at 02:51 PM infectedgamer51

Anywhere in the script (but not inside another function!) - between Start and LateUpdate, for instance. This code just make a local read of the left mouse button, calling Fire() when it's pressed. Maybe you should use GetMouseButton instead of GetMouseButtonDown - the latter will only shoot once, while the first allows continuous firing.

Apr 06, 2012 at 02:55 PM aldonaletto

In between your Start() and LateUpdate() functions. :) What @Aldonaletto is saying is that you aren't actually calling your Fire() function anywhere in the script, so of course your machine gun won't work. Therefore, you should insert his code which adds an Update() function (a method which runs every frame) and calls your Fire() function when the left mouse button is held down. ;)

Apr 06, 2012 at 02:56 PM Kleptomaniac
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x5000
x648
x23

asked: Apr 05, 2012 at 09:08 PM

Seen: 783 times

Last Updated: Apr 06, 2012 at 04:38 PM