Как проверить, трогаю ли я что-то в Unity - PullRequest
0 голосов
/ 29 мая 2020

У меня есть функция OnCollisionEnter2D, но она говорит только один раз, когда я приземляюсь на землю, мне нужна функция, которая будет возвращать имя объекта (или что-то подобное), если я касаюсь его, так что если я оставайся на нем, он будет говорить мне об этом не один раз, а каждый кадр.

1 Ответ

1 голос
/ 29 мая 2020

Это так же просто, как использовать правильный метод OnCollisionStay2D, который вызывается каждый кадр, когда вы сталкиваетесь с другим объектом

Отправляет каждый кадр, где коллайдер находится на другом объекте касается коллайдера этого объекта (только 2D-физика).

Честно говоря: их пример в этой ссылке - чушь собачья, поскольку он предназначен для OnTriggerStay2D ^^

Это могло бы выглядеть как

private void OnCollisionStay2D(Collision2D collision) 
{ 
    Debug.Log($"I am touching {collision.gameObject.name}", this); 
} 

Если вместо этого вы хотите отслеживать каждый касающийся объект , я бы предпочел использовать что-то вроде

private HashSet<GameObject> _currentlyTouching = new HashSet<GameObject>();

private void OnCollisionEnter2D(Collision2D collision)
{
    if(!_currentlyTouching.Contains(collision.gameObject))
    {
        _currentlyTouching.Add(collision.gameObject);
    }
}

private void OnCollisionExit2D(Collision2D collision)
{
    if(_currentlyTouching.Contains(collision.gameObject))
    {
        _currentlyTouching.Remove(collision.gameObject);
    }
}

private void Update()
{
    var logString = new StringBuilder("I am touching ");
    foreach(var touchingObject in _currentlyTouching)
    {
        logString.Append(touchingObject.name).Append(" ");
    }
    Debug.Log(logString.ToString(), this);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...