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;
}
}
}
↧