如何统一访问特定组件

时间:2017-02-06 12:31:04

标签: c# unity3d

好的,我试图从碰撞回调中访问boxcollider2d,如下所示:

    void OnCollisionEnter2D(Collision2D col)
    {
        col.collider.GetComponent<BoxCollider2D>().sharedMaterial.friction = 0;
    }

但首先它不起作用(propoerty为null),如果我有两个boxcollider2d,我该怎么办?

什么是正确的方法?

由于

1 个答案:

答案 0 :(得分:0)

根据Collision2D documentation .collider属性是

  

传入的Collider2D参与了碰撞。

这意味着它与你碰撞的实际组件(BoxCollider2D,CircleCollider2D,PolygonCollider2D或EdgeCollider2D)。

因此,请尝试删除GetComponent,看看你得到了什么。如果你真的想使用GetComponent(如果不需要则不推荐使用),你可以使用col.gameObject来获取GameObject,然后使用col.gameObject.GetComponent<BoxCollider2D>()

如果有多个组件,您将获得一组组件。这可能是您的问题,您必须指定所需的组件:col.gameObject.GetComponent<BoxCollider2D>()[0]。但是如果你选择col.collider,你应该得到碰撞中实际触碰过的对撞机。