#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 в секунду.