- Home /
This question was
closed Dec 21, 2018 at 01:53 AM by
el-mas-pro-470 for the following reason:
Nobody answers the question (Again)
Question by
el-mas-pro-470 · Dec 20, 2018 at 07:21 PM ·
gameweaponkeyreloadweapon system
Reload with keypress work bad!
I have made a line of code that makes pressing the R key the gun reloads, but it works very poorly and surrealistically, it passes ammo (Current Ammo) and has no trigger limit, does anyone know anything? Thank you
using UnityEngine;
using System.Collections;
public class WEAPONTEST : MonoBehaviour {
public float Damage = 0f;
public float Range = 0f;
public float ImpactForce = 0f;
public float FireRate = 0f;
public int MaxAmmo = 0;
public int TotalAmmo = 0;
public int CurrentAmmo;
public float ReloadTime = 0;
private bool IsReloading = false;
public Camera FPScam;
public ParticleEmitter MuzzleFlash;
public GameObject HitEffect;
private float NextTimeToFire = 0f;
public GameObject ReloadObject;
public GameObject ReloadGUI;
public AudioClip ShootSound;
void Start()
{
CurrentAmmo = MaxAmmo;
}
void OnEnable()
{
IsReloading = false;
}
void Update () {
if (TotalAmmo < 0){
CurrentAmmo = 0;
return;
}
if(IsReloading)
return;
if(Input.GetKeyDown(KeyCode.R))
{
StartCoroutine(Reload());
return;
}
if(Input.GetButton("Fire1") && Time.time >= NextTimeToFire)
{
NextTimeToFire = Time.time + 1f/FireRate;
Shoot();
}
}
IEnumerator Reload()
{
IsReloading = true;
Debug.Log("Reloading...");
ReloadObject.SetActive(false);
ReloadGUI.SetActive(true);
yield return new WaitForSeconds(ReloadTime - 0.25f);
ReloadGUI.SetActive(false);
ReloadObject.SetActive(true);
TotalAmmo -= MaxAmmo;
CurrentAmmo = MaxAmmo;
IsReloading = false;
}
void Shoot()
{
MuzzleFlash.Emit();
audio.Play();
audio.clip = ShootSound;
CurrentAmmo--;
RaycastHit hit;
if (Physics.Raycast(FPScam.transform.position, FPScam.transform.forward, out hit, Range))
{
Debug.Log(hit.transform.name);
Target target = hit.transform.GetComponent<Target>();
if(target != null)
{
target.TakeDamage(Damage);
}
if(hit.rigidbody != null)
{
hit.rigidbody.AddForce(-hit.normal * ImpactForce);
}
Instantiate(HitEffect, hit.point, Quaternion.LookRotation(hit.normal));
}
}
}
Comment
Follow this Question
Related Questions
How do I stop my weapon from firing while reloading? 2 Answers
Can't set an int from seperate script 1 Answer
Reload manually in raycast? 1 Answer
Getting Score Each Time Key is Destroyed 1 Answer
Weapon reload timer problem. 2 Answers