如何检查我是否在Unity中触摸到了什么?

问题描述 投票:0回答:1

我有OnCollisionEnter2D功能,但它只说了一次,当我落地时,我想要的功能是,如果我接触到它,它会返回对象名称(或类似这样的东西),所以如果我停留在它上面,它就会告诉我,不仅一次,而且每一帧。

c# unity3d
1个回答
1
投票

这很简单,只要使用正确的方法就可以了。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);
}
© www.soinside.com 2019 - 2024. All rights reserved.