我有OnCollisionEnter2D功能,但它只说了一次,当我落地时,我想要的功能是,如果我接触到它,它会返回对象名称(或类似这样的东西),所以如果我停留在它上面,它就会告诉我,不仅一次,而且每一帧。
这很简单,只要使用正确的方法就可以了。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);
}