Question by
SpyderManToo · Feb 07, 2021 at 07:18 AM ·
fpsgunshootreload
Hitmarker still shows while reloading
Im making an aim trainer and i just added reloading and ammo, but heres the thing, u can still see the hitmarker. i tried putting it in an if(!isReloading) if statement but it still doesn't work heres the basic code, hopefuly someone can teach me how to make it so hitmarker only shows if u are acttually shooting
btw, no, it doesn't actually count as hitting the target, but it still shows hitmarker hopefully that makes sense
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Gun : MonoBehaviour
{
public bool singleShotGun;
public ScoreCounter scoreCounter;
public Image hitmarkerImage;
public float hitmarkerWait;
public float damage = 10f;
public float range = 100f;
public Camera fpsCam;
public float _shotsFired;
public float _shotsHit;
public Color CLEARWHITE = new Color(1, 1, 1, 0);
float akCooldown = 0.06f;
float pistolCooldown = 0.5f;
float cooldown;
public int maxAmmo;
int currentAmmo;
public float reloadTime;
bool isReloading = false;
public Animator animator;
void Start()
{
hitmarkerImage.color = CLEARWHITE;
currentAmmo = maxAmmo;
}
void OnEnable()
{
isReloading = false;
animator.SetBool("Reloading", false);
}
void Update()
{
if(isReloading)
return;
if(cooldown > 0)
{
cooldown -= Time.deltaTime;
}
if(currentAmmo <= 0)
{
StartCoroutine(Reload());
return;
}
if(!singleShotGun)
{
if(Input.GetButton("Fire1"))
{
if(cooldown <= 0)
{
cooldown = akCooldown;
MultiShotShoot();
}
}
}
else if(singleShotGun)
{
if(Input.GetButtonDown("Fire1"))
{
if(cooldown <= 0)
{
cooldown = pistolCooldown;
SingleShotShoot();
}
}
}
if(hitmarkerWait > 0)
{
hitmarkerWait -= Time.deltaTime;
}
else if(hitmarkerImage.color.a > 0)
{
hitmarkerImage.color = Color.Lerp(hitmarkerImage.color, CLEARWHITE, Time.deltaTime * 10f);
}
}
IEnumerator Reload()
{
isReloading = true;
Debug.Log("Reloading");
animator.SetBool("Reloading", true);
yield return new WaitForSeconds(reloadTime - .25f);
animator.SetBool("Reloading", false);
yield return new WaitForSeconds(.25f);
currentAmmo = maxAmmo;
isReloading = false;
}
void SingleShotShoot()
{
scoreCounter.shotsFired += 1;
currentAmmo = currentAmmo - 1;
RaycastHit hit;
if(Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
Debug.Log("You hit " + hit.transform.name);
hitmarkerImage.color = Color.white;
scoreCounter.shotsHit += 1;
}
}
void MultiShotShoot()
{
scoreCounter.shotsFired += 1;
currentAmmo = currentAmmo - 1;
RaycastHit hit;
if(Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
Debug.Log("You hit " + hit.transform.name);
hitmarkerImage.color = Color.white;
scoreCounter.shotsHit += 1;
}
}
}
Comment
Your answer
Follow this Question
Related Questions
how to add shoot cooldown 1 Answer
Painting With Particles 1 Answer
fireRate javascript? 1 Answer
Need help with shooting and reload script 1 Answer
First Person Hands and Gun Overlay Position Question 1 Answer