- Home /
Question by
Wesley21spelde · Mar 05, 2014 at 11:54 AM ·
gunreload
Gun script reload problems
hey guys i have a qustion aboute my gun script it almost works fine But!when i dont have any bullet Clips left i can still do the reload animation when i press r and it shouls be doing that i think i know how to fix it but i cant add the code to the script becouse i triad this
if (clips > 0) {
clips--;
bulletsLeft = bulletsPerClip;
UpdateGUI();
Reload (); = false;
}
}
But it does not work here is 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;
var muzzleFlash : Renderer;
var bulletGUI : GUIText;
var HandsP90 : GameObject;
var minimumRunSpeed = 1.0;
private var hitParticles : ParticleEmitter;
private var bulletsLeft : int = 0;
private var nextFireTime = 0.0;
private var m_LastFrameShot = -1;
private var machineGun : P90GunScript;
function Awake () {
machineGun = GetComponentInChildren(P90GunScript);
}
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;
animation.wrapMode = WrapMode.Loop;
animation.Play ("Idle");
animation["Idle"].layer = 1;
animation.wrapMode = WrapMode.Once;
animation["AimIn"].layer = 2;
animation["AimOut"].layer = 2;
animation["Reload3"].layer = 2;
animation.wrapMode = WrapMode.PingPong;
animation["Reload1"].layer = 2;
}
function SetSpeed (speed : float) {
if (speed > minimumRunSpeed)
animation.CrossFade("Reload1");
else
animation.CrossFade("idle");
if (speed > minimumRunSpeed)
animation.CrossFade("AimIn");
else
animation.CrossFade("idle");
}
function LateUpdate() {
if (muzzleFlash) {
UpdateGUI();
// 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 = false;
}
} else {
// We didn't, disable the muzzle flash
muzzleFlash.enabled = false;
enabled = false;
// Play sound
if (audio)
{
audio.loop = false;
}
if( Input.GetKey( "r" ) ) {
Reload();
}
}
}
}
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 () {
BroadcastMessage("Reload2");
Reload2 ();
// Wait for reload time first - then add more bullets!
yield WaitForSeconds(reloadTime);
// We have a clip left reload
if (clips > 0) {
clips--;
bulletsLeft = bulletsPerClip;
UpdateGUI();
}
}
function Reload1 () {
Reload2 ();
}
function Reload2 (){
HandsP90.audio.Play ();
HandsP90.animation.Play ("Reload1");
yield WaitForSeconds (1.5);
HandsP90.animation.Stop ("Reload1");
HandsP90.animation.Play ("Reload3");
yield WaitForSeconds (0.5);
HandsP90.animation.Stop ("Reload3");
HandsP90.animation.Play ("Reload4");
yield WaitForSeconds (0.1);
HandsP90.animation.Stop ("Reload4");
HandsP90.animation.Play("Idle");
}
function GetBulletsLeft () {
return bulletsLeft;
}
function UpdateGUI () {
// Update machine gun gui
// Machine gun gui is simply drawn with a bullet counter text
if (machineGun) {
bulletGUI.text = machineGun.GetBulletsLeft().ToString();
}
}
Comment
Best Answer
Answer by maddFrogg · Mar 05, 2014 at 12:53 PM
Try changing this
function Reload () {
BroadcastMessage("Reload2");
Reload2 ();
// Wait for reload time first - then add more bullets!
yield WaitForSeconds(reloadTime);
// We have a clip left reload
if (clips > 0) {
clips--;
bulletsLeft = bulletsPerClip;
UpdateGUI();
}
}
for this
function Reload () {
if (clips > 0) {
BroadcastMessage("Reload2");
Reload2 ();
// Wait for reload time first - then add more bullets!
yield WaitForSeconds(reloadTime);
// We have a clip left reload
clips--;
bulletsLeft = bulletsPerClip;
UpdateGUI();
}
}
Answer by Griffo · Mar 05, 2014 at 12:22 PM
Try changing line 79 to
if( Input.GetKey( "r" ) && clips > 0) {
Your answer
Follow this Question
Related Questions
No Reload Script Works 1 Answer
Gun reloading script/instructions? 1 Answer
Wrote a script for Shooting, reloading and to display the AMMO in a GUIText 1 Answer
Make player unable to shoot when reloading 3 Answers
How to loop functions 1 Answer