• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
Question by infectedgamer51 · Apr 05, 2012 at 09:08 PM · gunmachinegun

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; } }

Comment
aldonaletto

People who like this

1 Show 0
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image

Answer by aldonaletto · Apr 05, 2012 at 09:31 PM

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!

Comment

People who like this

0 Show 6 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image infectedgamer51 · Apr 05, 2012 at 10:06 PM 0
Share

i did all of that but still nothing happens

avatar image aldonaletto · Apr 05, 2012 at 11:16 PM 0
Share

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();
  }
}
avatar image infectedgamer51 · Apr 06, 2012 at 02:51 PM 0
Share

where exactly should that be added?

avatar image aldonaletto · Apr 06, 2012 at 02:55 PM 0
Share

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.

avatar image Kleptomaniac · Apr 06, 2012 at 02:56 PM 0
Share

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. ;)

Show more comments

Your answer

Hint: You can notify a user about this post by typing @username

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

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

cant get my gun to work 0 Answers

Sleep Syntax Unity 1 Answer

Need help with bullet/gun scripting 3 Answers

Shoot Gun Aim Bullet? 1 Answer

Gun reloading script/instructions? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges