Reload weapon by pressing R

so this is what i did, and i made the input button set to R but when i press R i do not reload

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;
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;
	}
	    if(Input.GetButtonUp("Reload")){
		clips--;
		bulletsLeft = bulletsPerClip;
    }
}


function GetBulletsLeft () {
	return bulletsLeft;
}

what is wrong? i can’t figure it out, i get no errors from it within unity, but it still doesn’t work

try Input.GetButtonDown instead of up

when you are programming input logic, remember to test it before printing something to the console with debug.log and check if your input methods are working as expected

Input.GetButtonDown

did not work

You did change the Input setting to recognize “Reload” being the R key didnt you? Ill look at your code more to see if i can find anything wrong with it, but might as well start with simple things.

edit :

please not that the only time the reload function is called with the current logic is if the current “Clip” in the gun is empty.

I did set the input

Ok, so how do i make it so it can reload even if the clip isn’t empty?

put the
if(Input.GetKeyDown(“Reload”)) in the fire once function or any function thats updated repeatidly, and when it is pressed call the reload function.

Put this

function Update(){
if(Input.GetButtonUp("Reload"))
     Reload();
}

at the end of the script and take out that part you added to the reload function.

adding that code still does not work :frowning:

You have two separate threads with this same question. Please don’t do this in future - it wastes people’s time if they suggest things that have already been suggested in the other thread. I’m locking this, but please continue the discussion in your other thread.