Это так же просто, как использовать правильный метод 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);
}