motkot
@motkot
Программирование C#.

Как изменить переменные находящиеся в другом классе?

У меня есть скрипт оружия, там есть переменные: Ammo, ExtraAmmo, ClipAmmo. Они отвечают за количество патрон в обойме,дополнительные патроны и максимальное количество патрон в обойме. Есть метод FireData где проверяется, если патрон в обойме 0, то начать перезарядку, но я не могу писать как оружие должно перезаряжаться, потому что я не знаю какое число в этих трех переменных. Я занес их в качестве параметров, но как вызвать это в Invoke? Есть способ лучше?

using UnityEngine;

public class Pistol : MonoBehaviour
{
    public int Ammo;
    public int ExtraAmmo;
    public int ClipAmmo;
    public float RateOfFire;
    public float ReloadTime;
    public float Damage;
    [Space]
    public bool CanFire;

    public void Update()
    {
        if(Input.GetButtonDown("Fire"))
        {
            Fire();
            FireData();
        }
    }
    public void Fire()
    {

    }
    public void FireData()
    {
        Ammo--;
        if(Ammo == 0 && ExtraAmmo != 0)
        {
            GunManager.StatsUI.text = "Reloading...";
            Invoke(GunManager.Reloading(ref Ammo,ref ExtraAmmo,ref ClipAmmo), ReloadTime); // Нужно string,а у меня void
        }
        else
        {
            GunManager.StatsUI.text = "You dont\nhave ammo.";
        }
    }
}


using UnityEngine;
using UnityEngine.UI;
public static class GunManager
{
    public static Text StatsUI;
    public static GameObject FirstGun;
    public static GameObject SecondGun;
    public static void Reloading(ref int Ammo, ref int ExtraAmmo, ref int ClipAmmo)
    {
        if(ClipAmmo <= ExtraAmmo)
        {
            ExtraAmmo -= ClipAmmo;
            Ammo = ClipAmmo;
        }else
        {
            Ammo = ExtraAmmo;
            ExtraAmmo = 0;
        }
    }
}
  • Вопрос задан
  • 850 просмотров
Пригласить эксперта
Ответы на вопрос 2
1. Не переменная, а поле.
2. Чтобы получить к ним доступ, надо взять экземпляр этого класса.
Вроде в юнити есть какие-то компоненты, которые можно получить через GetComponent
Ответ написан
Комментировать
@SLiverRU
Unity, C#, не сделал ни одной игры... Пока что.
Я бы сделал переменные, которые нужно изменять из другого класса, статическими (public static ammo;). А в другом классе я бы сделал так
// Что-то до этого
Pistol.ammo = 7; // название скрипта, в котором находится переменная; точка; название СТАТИЧЕСКОЙ переменной; равно; нужное число;.
// Что-то после этого...

Я правда не знаю, работает ли это, но попробовать стоит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы