- Home /
Help First Person Shooter Bullets instantianion
may u help me with this script,i cant get the bullets "projectile" to shoot from the child object "BulletSpawn" at all. they did it when i had the get button down, instansiate script, but that onlt made one every click i want one everytime the gun shoots. the scritp is a modified version of "MachineGun" from unity as i dont fully know hoiw to script. (java)
var projectile : Rigidbody; var range = 100.0; var fireRate = 0.7; var force = 10.0; var damage = 5.0; var bulletsPerClip = 40; var clips = 20; var reloadTime = 0.5; var hitParticles : ParticleEmitter; var muzzleFlash : Renderer; var muzzleFlame : Light; var bulletSpawn : Transform;
private var bulletsLeft : int = 0; private var nextFireTime = 0.0; private var m_LastFrameShot = -1; private var shoot;
function Start () { hitParticles = GetComponent (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; muzzleFlame.enabled = true;
if (audio) { audio.Play();
}
} else { // We didn't, disable the muzzle flash muzzleFlash.enabled = false; enabled = false; muzzleFlame.enabled = false; enabled = false;
} } }
function Shoot () { if (m_LastFrameShot == Time.frameCount) { Instantiate (projectile, bulletSpawn.position, bulletSpawn.rotation); } }
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; }
Please reformat your question and post the code as a code sample. When you hit edit there should be a bunch of icons above the text area. Select the code block and hit the binary numbers icon (lots of 0 and 1 numbers picture), look at the previewer if all fits (scroll down) and you should be ready to ask a question here.
Answer by Justin Warner · Dec 05, 2010 at 03:24 PM
Well, you said you used the GetButtonDown to fire, and I'm not going to try to read your code... So, how about, rather than doing GetButtonDown, just do GetButton
http://unity3d.com/support/documentation/ScriptReference/Input.GetButton.html
It'll then shoot whatever for as long as you hold down your key. Like a machinegun I guess you could say!
Latz!
Answer by TheGameObject · Dec 05, 2010 at 04:37 PM
Thanks Its me i made new account. this didnt work as the script itself dosent use get button down it recives "fire" from another script that has get button down
in human terms i told the script to make a bullet from a transform every time i shoot
function Shoot () { if (m_LastFrameShot == Time.frameCount) { Instantiate (projectile, bulletSpawn.position, bulletSpawn.rotation); } }
im learning still
Your answer
Follow this Question
Related Questions
Help First Person Shooter Bullets instantianion 0 Answers
Setting bullet instansiate direction? help? 1 Answer
Question about bullets and networking 0 Answers
Enemy Instantiating one bullet 3 Answers
Add force to Instantiated object. 4 Answers