Question by
Bastin-Ross · Sep 03, 2015 at 05:06 AM ·
shootingplayer movementammo
Player will not stop shooting when ammo count = 0
My player continues shooting even when ammo = 0. Does anyone know how I Can get it to stop shooting when this happens? Thank you in advance.
public int Ammo;
public int maxAmmo = 100;
public Text text;
PlayerShooting playerShooting;
// Use this for initialization
void Start () {
text = GetComponent <Text> ();
playerShooting = GetComponent <PlayerShooting> ();
Ammo = maxAmmo;
}
// Update is called once per frame
void Update () {
if (Input.GetButton ("Fire1") && Ammo > 0)
{
text.text = Ammo - 1 + "/" + "100";
Ammo -= 1;
}
if (Ammo <= 0) {
playerShooting.enabled = false;
}
}
This is my player movement script if it helps.
public int damagePerShot = 20; // The damage inflicted by each bullet.
public float timeBetweenBullets = 0.15f; // The time between each shot.
public float range = 100f; // The distance the gun can fire.
float timer; // A timer to determine when to fire.
Ray shootRay; // A ray from the gun end forwards.
RaycastHit shootHit; // A raycast hit to get information about what was hit.
int shootableMask; // A layer mask so the raycast only hits things on the shootable layer.
ParticleSystem gunParticles; // Reference to the particle system.
LineRenderer gunLine; // Reference to the line renderer.
AudioSource gunAudio; // Reference to the audio source.
Light gunLight; // Reference to the light component.
float effectsDisplayTime = 0.2f; // The proportion of the timeBetweenBullets that the effects will display for.
void Awake ()
{
// Create a layer mask for the Shootable layer.
shootableMask = LayerMask.GetMask ("Shootable");
// Set up the references.
gunParticles = GetComponent<ParticleSystem> ();
gunLine = GetComponent <LineRenderer> ();
gunAudio = GetComponent<AudioSource> ();
gunLight = GetComponent<Light> ();
}
void Update ()
{
// Add the time since Update was last called to the timer.
timer += Time.deltaTime;
// If the Fire1 button is being press and it's time to fire...
if(Input.GetButton ("Fire1") && timer >= timeBetweenBullets)
{
// ... shoot the gun.
Shoot ();
}
// If the timer has exceeded the proportion of timeBetweenBullets that the effects should be displayed for...
if(timer >= timeBetweenBullets * effectsDisplayTime)
{
// ... disable the effects.
DisableEffects ();
}
}
public void DisableEffects ()
{
// Disable the line renderer and the light.
gunLine.enabled = false;
gunLight.enabled = false;
}
void Shoot ()
{
// Reset the timer.
timer = 0f;
// Play the gun shot audioclip.
gunAudio.Play ();
// Enable the light.
gunLight.enabled = true;
// Stop the particles from playing if they were, then start the particles.
gunParticles.Stop ();
gunParticles.Play ();
// Enable the line renderer and set it's first position to be the end of the gun.
gunLine.enabled = true;
gunLine.SetPosition (0, transform.position);
// Set the shootRay so that it starts at the end of the gun and points forward from the barrel.
shootRay.origin = transform.position;
shootRay.direction = transform.forward;
// Perform the raycast against gameobjects on the shootable layer and if it hits something...
if(Physics.Raycast (shootRay, out shootHit, range, shootableMask))
{
// Try and find an EnemyHealth script on the gameobject hit.
EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> ();
// If the EnemyHealth component exist...
if(enemyHealth != null)
{
// ... the enemy should take damage.
enemyHealth.TakeDamage (damagePerShot, shootHit.point);
}
// Set the second position of the line renderer to the point the raycast hit.
gunLine.SetPosition (1, shootHit.point);
}
// If the raycast didn't hit anything on the shootable layer...
else
{
// ... set the second position of the line renderer to the fullest extent of the gun's range.
gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);
}
}
}
}
Comment
Answer by Positive7 · Sep 03, 2015 at 06:19 AM
Set up a bool. Something like this (Sent from mobile so not tested) :
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class test3 : MonoBehaviour {
public int Ammo;
public int maxAmmo = 100;
public Text text;
bool canReload = false;
PlayerShooting playerShooting;
void Start () {
text = GetComponent <Text> ();
playerShooting = GetComponent <PlayerShooting> ();
Ammo = maxAmmo;
}
void Update () {
text.text = Ammo + "/" + "100";
if (Input.GetButton ("Fire1") && Ammo > 0)
{
Ammo -= 1;
if(Ammo <= 0){
canReload = true;
}
}
if (Ammo == 0 && canReload) {
canReload = false;
Debug.Log("Press R to Reload");
}
if(Input.GetKeyDown(KeyCode.R)){
Ammo = maxAmmo;
}
}
}
Firstly, Thankyou for your reply. I tried your recommended script but the player continues to shoot when ammo=0 and I'm not sure how to stop this from happening.