|
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;
}
}
(comments are locked)
|
|
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. i did all of that but still nothing happens
Apr 05 '12 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 '12 at 11:16 PM
aldonaletto
where exactly should that be added?
Apr 06 '12 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 '12 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 '12 at 02:56 PM
Kleptomaniac
(comments are locked)
|
