Я не хочу создавать сценарий стрельбы, ссылающийся на сценарий боеприпасов, который я сделал ранее. Я не хочу, чтобы сценарий стрельбы стрелял только тогда, когда боеприпасы равны или меньше максимального количества боеприпасов, но их больше 0. Я попытался сделать боеприпасы и максимальные боеприпасы как publi c stati c int в сценарии боеприпасов и частный stati c int в сценарии съемки, но похоже, что это не работает. Есть ли проблема с рефренсом или проблема с самим скриптом.
Боеприпасы:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Ammo : MonoBehaviour
{
public static int Ammocount;
public static int Maxammo;
public float Magazines;
public Text AmmoCounter;
public Text MagazinesUI;
private string AmmointoString;
private string MagazinesintoString;
// Start is called before the first frame update
void Start()
{
Ammocount = 6;
Maxammo = 6;
Magazines = 10;
}
// Update is called// once per frame
void Update()
{
// Transforms a int into a string and also it makes the ammo a part of the UI
MagazinesintoString = Magazines.ToString();
AmmointoString = Ammocount.ToString();
AmmoCounter.text = AmmointoString;
MagazinesUI.text = MagazinesintoString;
//If you have ammo and you press mouse one ammo deacreses and if you have less than 6 bullets you
if (Ammocount <= Maxammo && Input.GetButtonDown("Fire1") && Ammocount > 0)
{
Ammocount -= 1;
}
else if (Ammocount < Maxammo)
{
if (Input.GetKeyDown("r") && Magazines > 0)
{
Ammocount = 6;
Magazines -= 1;
}
}
}
}
Скрипт оружия:
using UnityEditor;
using UnityEngine;
public class Gunscript : MonoBehaviour
{
public float Damage = 10f;
public float Range = 100f;
public ParticleSystem muzzleflash;
public Camera Fpscam;
private AudioSource gunshot;
public GameObject Pistol;
private static int ammo;
private static int maxammo;
void Start()
{
ammo = Ammo.Ammocount;
maxammo = Ammo.Maxammo;
gunshot = GetComponent<AudioSource>();
}
// Update is called once per frame
void Update()
{
if (Input.GetButtonDown("Fire1") && ammo <= maxammo && ammo > 0)
{
muzzleflash.Play();
Shoot();
gunshot.Play(0);
}
void Shoot()
{
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);
}
}
}
}
}