Андрей Панарин
Искусственный Интеллект
(242733)
9 месяцев назад
Фокус в том, что в корутине новое значение слайдера задается не на основе старого значения слайдера, а на основе значения поля currentHungry, которое только уменьшается.
При утолении голода увеличивается значение слайдера. Однако это никак не влияет на значение поля currentHungry: в корутине оно продолжает убывать с того места, где остановилось.
Необходимо либо уменьшать currentHungry в обоих местах, либо вообще обходиться без currentHungry.
Максим ТютеревУченик (193)
9 месяцев назад
Точно, тогда можно просто сделать вот так:
public void AddFood(int value)
{
GetComponent<Hungry> ().currentHungry += value;
}
Но тогда, как после съедания еды, остановить корутину на какое-то время?
IEnumerator hungry(float h)
{
while (currentHungry >= minHungry)
{
yield return new WaitForSeconds(time);
currentHungry -= h;
slider.value = currentHungry;
}
}
___________________________________________________________
Так же есть код, который пополняет индиктор(slider) голода:
public void AddFood(int value)
{
GetComponent<Slider> ().value += value;
}
Проблема в том, что при съедании еды из инвентаря - индиктор пополняется, а потом встаёт обратно и начинет дальше уменьшаться. При съедании еды, нужно остановить корутину на какое-то время и только через это время она запускалась бы снова, но уже с полным индиктором голода(так как игрок съел еду и индиктор стал полным).
____________________________________________________________
Так же существует код съедания еды из инвентаря(при нажатии на кнопку):
public void OnPointerClick(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Left)
{
if (inventory.item[index].customEvent != null)
{
inventory.item[index].customEvent.Invoke();
}
}
_____________________________________________________________
Уже который час не могу понять, как такое реализовать. Это кажется для меня чем-то невероятно сложным. Пожалуйста, помогите.