Ползунок пользовательского интерфейса действует по-разному в режиме воспроизведения и автономной сборке (движок Unity)

#c# #unity3d #input #slider

#c# #unity3d #ввод #слайдер

Вопрос:

У меня есть слайдер пользовательского интерфейса. При удерживании нажатой левой кнопки мыши его значение уменьшается. Я использую Input.GetMouseButton(0) для того, чтобы заставить это работать. Код работает нормально. Однако, когда я тестирую ползунок в режиме воспроизведения (встроенный в Unity), его значение уменьшается намного быстрее, чем в оконном режиме воспроизведения (2 сек против 5 сек). В автономной сборке Windows он становится еще медленнее (15 сек). Недавно я проверил его на macOS, и проблема та же. Синхронизация слайдера пользовательского интерфейса чрезвычайно важна в моей игровой механике.

Я могу предположить, что это зависит от частоты кадров, но как в режиме воспроизведения, так и в автономной сборке частота кадров составляет 150-200 кадров в секунду.

GIF, который наглядно демонстрирует разницу во времени.

Player.cs

 public class Player : MonoBehaviour
{
    public int maxFuel = 1000;
    public int fuelAmount;

    public FuelBar fuelBar;

    void Start()
    {
        fuelAmount = maxFuel;
        fuelBar.SetMaxFuel(maxFuel);
    }

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            SpendFuel(1);
        }
    }

    void SpendFuel(int fuel)
    {
        fuelAmount -= fuel;
        fuelBar.SetFuel(fuelAmount);
    }
}
 

FuelBar.cs

 public class FuelBar : MonoBehaviour
{
    public Slider fuelBar;

    public void SetMaxFuel(int fuel)
    {
        fuelBar.maxValue = fuel;
        fuelBar.value = fuel;
    }

    public void SetFuel(int fuel)
    {
        fuelBar.value = fuel;
    }
}
 

Заранее спасибо! 🙂

Комментарии:

1. Можете ли вы показать код?

Ответ №1:

Измените fuel на float и умножьте его в update на Time.deltaTime .

 SpendFuel(1f * Time.deltaTime);
 

Возможно, также захочется перейти 1f на что-то большее, поскольку теперь это x в секунду.