WasTabon
@WasTabon

Как можно сократить код в OnTriggerEnter2D?

private bool _isPlayerInside;

    private void Update() 
    {
        Press();
    }

    private void OnTriggerEnter2D(Collider2D coll) 
    {
        if (coll.gameObject.CompareTag("Player"))
        {
            _isPlayerInside= true;
        }
    }
    private void OnTriggerExit2D(Collider2D coll) 
    {
        if (coll.gameObject.CompareTag("Player"))
        {
            _isPlayerInside= false;
        }
    }

    private void Press()
    {
        if (_playerInput.Player.E.WasPressedThisFrame() && _isPlayerInside)
            {
                Debug.Log("Pressed");
            }
    }

Нужно чтобы если игрок вошел в триггер и нажал на кнопку, то метод сработал.
Если просто метод Press() закинуть в OnTriggerEnter2D то ничего не будет (что логично, потому что он срабатывает только при входе)
Пробовал ещё Stay, но он работает когда игрок внутри триггера передвигается
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 3
flexer1992
@flexer1992
Unity Developer
_isPlayerInside = coll.gameObject.CompareTag("Player");


Вопрос только зачем? Какие задачи это решит?)
Ответ написан
K0TlK
@K0TlK
Буллю людей.
Убрать фигурные скобочки. А если использовать TryGetComponent, то еще больше сократишь.
private void OnTriggerEnter2D(Collider2D coll) 
    {
        if (coll.gameObject.CompareTag("Player"))
        {
            _isPlayerInside= true;
        }
    }


==>

private void OnTriggerEnter2D(Collider2D coll) 
    {
        if (coll.TryGetComponent(out Player player) _isPlayerInside = true;
    }


А можно пойти дальше и вообще всё в одну строку уместить.

private void OnTriggerEnter2D(Collider2D coll) { if (coll.TryGetComponent(out Player player)) _isPlayerInside = true; }


Ну как? Читабельно? Не нужно всё пытаться сократить. У тебя был читабельный метод из четырех строк, но я, путем сокращения, превратил его в нечитабельное месиво символов. Сокращать нужно, когда у тебя явно есть повтор кода или в одном методе столько строк, что, чтобы разобраться как он работает, тебе приходится делать комментарии в этом методе.
Ответ написан
FireDrago19
@FireDrago19
Не понял суть темы, но если вся суть в том что написано под скринами..
Нужно чтобы если игрок вошел в триггер и нажал на кнопку, то метод сработал.
Если просто метод Press() закинуть в OnTriggerEnter2D то ничего не будет (что логично, потому что он срабатывает только при входе)
Пробовал ещё Stay, но он работает когда игрок внутри триггера передвигается


Можно в Update проверять на _isPlayerInside, и в случае есть оно истинно, то вызывать Press()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы