总之,我想找到碰撞中涉及的两个碰撞体
当您的脚本继承自MonoBehaviour
时,会声明一个gameObject
变量。该变量是指此脚本所附加到的GameObject。您可以使用gameObject
变量获取一个GameObject,并从OnTriggerEnter
函数中的Collider2D
参数中获取另一个GameObject。
void OnTriggerEnter2D(Collider2D collision)
{
GameObject obj1 = this.gameObject;
GameObject obj2 = collision.gameObject;
Debug.Log("Triggered Obj1: :" + obj1.name);
Debug.Log("Triggered obj2: :" + obj2.name);
}
EDIT:
这些物体对我没用,我需要碰撞体。不,我不能使用 'getcomponent' ,因为它们有多个碰撞器,我只需要在碰撞中的那些。
应该将碰撞器作为游戏对象的子代,并将脚本附加到每个子碰撞器上,然后此答案中的内容就能起作用。
如果由于某些原因必须在不将碰撞器作为游戏对象的子代的情况下完成此操作,则可以使用布尔变量仅检测一次碰撞。
这是此帖子中一个答案的修改版。
首先,创建一个名为theOtherCollider
的本地Collider2D
变量,以存储在调用OnTriggerEnter2D
时首次报告的碰撞数据。然后再创建另一个名为detectedBefore
的boolean
变量,以确定是否之前已调用过OnTriggerEnter2D
。
当调用OnTriggerEnter2D
时,检查该boolean
变量的本地/当前版本是否为false
。如果它不是true
,则这是首次调用OnTriggerEnter2D
。使用GetComponent
获取另一个脚本,然后将boolean
变量设置为true
。同时,在其他脚本上对theOtherCollider
变量进行初始化,并使用从OnTriggerEnter2D
函数中获取的Collider2D
值。
现在,如果调用OnTriggerEnter2D
,并且该boolean
变量的本地/当前版本为true
,则将其设置为false
以重置它,然后使用theOtherCollider
变量和来自OnTriggerEnter2D
函数的Collider2D
变量获取两个碰撞体。
这可能有点混乱,但通过查看代码,就可以更容易地理解。
注意:
YOURSCRIPT
是包含OnTriggerEnter2D
函数并附加到碰撞器上的脚本的名称。您必须将其更改为该脚本的名称。
public bool detectedBefore = false;
public Collider2D theOtherCollider;
void OnTriggerEnter2D(Collider2D collision)
{
if (detectedBefore)
{
detectedBefore = false;
Collider2D col1 = theOtherCollider;
Collider2D col2 = collision;
Debug.Log("Triggered Obj1: " + col1.name);
Debug.Log("Triggered obj2: " + col2.name);
return;
}
YOURSCRIPT myScript = collision.gameObject.GetComponent<YOURSCRIPT>();
if (myScript)
{
myScript.detectedBefore = true;
myScript.theOtherCollider = collision;
}
}