检查线性渲染器是否与游戏对象碰撞

时间:2019-05-13 00:02:49

标签: c# unity3d

我想检查由线性渲染器创建的线是否与游戏对象碰撞。我尝试向boxenderenderer添加boxcollider2d,edgecollider2d组件,但是不起作用。这条线从上到下移动。游戏对象也有一个boxcollider。

enter image description here

更新游戏对象检查器的屏幕截图

linerenderer将与之碰撞的游戏对象 enter image description here

然后在划线机中。我使用脚本生成一行 enter image description here

myLine = new GameObject();
myLine.AddComponent<LineRenderer>();
    myLine.AddComponent<BoxCollider2D>();
    lr = myLine.GetComponent<LineRenderer>();
    lr.material = new Material(Shader.Find("Sprites/Default"));
    lr.positionCount = 3;
    lr.startWidth = .1f;
    lr.endWidth = .1f;
    lr.SetPosition(0, new Vector3(shapePositionValues.posA, shapePositionValues.posD, -1));
    lr.SetPosition(1, new Vector3(shapePositionValues.posB, shapePositionValues.posE, -1));
    lr.useWorldSpace = false;

1 个答案:

答案 0 :(得分:1)

我能想到的两个可能的问题:

问题1

2D和3D碰撞器不可能碰撞和交互。您似乎在屏幕快照中选择的那个对象上使用的是new targetType()(3D)而不是T。您提到您尝试在行中使用typedObjectBoxCollider,它们都是2D碰撞器,不会与3D碰撞器碰撞。

问题2

下面是汇总对撞机交互(不包括触发器)的表。

built-in

在碰撞中,您始终至少需要一个对象才能拥有BoxCollider2D组件。对于其他对象,您是否具有静态对撞机,常规BoxCollider2D或运动型EdgeCollider2D将取决于您如何移动/操作对象。

如果直接移动对象(通过代码在每一帧中设置其位置),则该对象应为Rigidbody,并且启用Rigidbody

如果要设置对象的速度或通过物理力对其进行操作,则它应该是常规的Rigidbody

如果对象永不移动,则通常应为静态对撞机(不带Rigidbody的对撞机)。