Почему не работает конструкция if после выполнения условия?
Буду краток: игрок подходит к еде и, при нажатии на E, пополняет полоску голода. Проблема кроется где-то в моменте нажатия кнопки E, так как без этой части кода всё прекрасно работает. Если переменную bool, отвечающую за нажатие E, сделать публичной, то видно, что само нажатие срабатывает, но код, что идёт в дальнейшем, почему-то нет.
void OnCollisionEnter2D(Collision2D coll)
{
if(coll.gameObject.GetComponent<Properties_food>() != null) //проверка на то, есть ли у объекта нужный скрипт
{
dataFood = coll.gameObject.GetComponent<Properties_food>();
if(isE == true) //проверка bool, отвечающая за нажатие кнопки
{
if(dataFood.kind == "fruit")
{
attribute.hunger += dataFood.satiety;
dataFood.bulk -= 5.0f;
}
if(dataFood.kind == "meat" || dataFood.kind == "fish")
{
attribute.poisoning += dataFood.satiety;
dataFood.bulk -= 5.0f;
}
}
}
}
Ответы (2 шт):
Возможно вам следует использовать OnCollisionStay, т.к. OnClollisionEnter выполняется раз, когда в него входят.
Т.е.:
1) Игрок входит OnCollisionEnter
2) OnCollisionEnter срабатывает, но видит, что кнопка не нажата (false)
3) Игрок нажимает E и срабатывает True
4) Ничего, т.к. OnCollisionEnter сработал лишь один раз и он не повторяется
P.s. Я бы лучше использовал OnTriggerStay2D, а также вместо if(isE == true) написал бы
Input.GetKeyDown(Keycode.E)
{
// код...
}
Т.е. пока игрок находится в триггере, то он может нажать E и съесть еду
Показал полностью в видео как можно решить проблему. Правда я показал в 3d, а не в 2d, но думаю не будет это столь значимым, т.к. принцип один и тот же.