0

Буду краток: игрок подходит к еде и, при нажатии на 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 Answers2

-1

Возможно вам следует использовать OnCollisionStay, т.к. OnClollisionEnter выполняется раз, когда в него входят.

Т.е.:

1) Игрок входит OnCollisionEnter

2) OnCollisionEnter срабатывает, но видит, что кнопка не нажата (false)

3) Игрок нажимает E и срабатывает True

4) Ничего, т.к. OnCollisionEnter сработал лишь один раз и он не повторяется

P.s. Я бы лучше использовал OnTriggerStay2D, а также вместо if(isE == true) написал бы

Input.GetKeyDown(Keycode.E)
{
     // код...
}

Т.е. пока игрок находится в триггере, то он может нажать E и съесть еду

  • Спасибо за совет! Однако, всё равно не работает по какой-то причине. Пробовал и Button, и Input - ничего – Макс Ю May 30 '20 at 09:49
  • Попробуй вместо OnCollisionEnter использовать OnTriggerStay.
    1. Поставь Collider на тот объект, к которому должен подойти игрок, расширь его (чтобы весь спрайт игрока мог влезть в него + немного места на всякий случай), а также поставь галочку isTrigger

    2. Добавь RigidBody и убери с него галочку Use gravity

    3. Используй свой скрипт, но смени на OnTriggerEnter2D(Collider2d coll)

    Должно сработать @МаксЮ

    – Steve Dekart May 30 '20 at 10:29
  • @МаксЮ Я попробую записать видео и показать – Steve Dekart May 30 '20 at 13:35
  • Спасибо большое, помогло! – Макс Ю May 31 '20 at 09:09
-1

Показал полностью в видео как можно решить проблему. Правда я показал в 3d, а не в 2d, но думаю не будет это столь значимым, т.к. принцип один и тот же.

https://youtu.be/nsvGeTVVEnA