C# 检查linerenderer是否与游戏对象冲突

C# 检查linerenderer是否与游戏对象冲突,c#,unity3d,C#,Unity3d,我想检查linerenderer创建的线条是否与游戏对象冲突。我尝试将boxcollider2d、edgecollider2d组件添加到linerenderer,但没有成功。这条线从上到下移动。游戏对象也有一个boxcollider 更新游戏对象检查器的屏幕截图 线渲染器将与之碰撞的游戏对象 然后在linerenderer中。我使用脚本生成一行 myLine=newgameobject(); myLine.AddComponent(); myLine.AddComponent(); lr=

我想检查linerenderer创建的线条是否与游戏对象冲突。我尝试将boxcollider2d、edgecollider2d组件添加到linerenderer,但没有成功。这条线从上到下移动。游戏对象也有一个boxcollider

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

线渲染器将与之碰撞的游戏对象

然后在linerenderer中。我使用脚本生成一行

myLine=newgameobject();
myLine.AddComponent();
myLine.AddComponent();
lr=myLine.GetComponent();
lr.material=新材质(Shader.Find(“精灵/默认”);
lr.positionCount=3;
lr.startWidth=.1f;
lr.endWidth=.1f;
lr.SetPosition(0,新向量3(shapePositionValues.posA,shapePositionValues.posD,-1));
lr.SetPosition(1,新向量3(shapePositionValues.posB,shapePositionValues.posE,-1));
lr.useWorldSpace=false;

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

问题1 二维和三维碰撞器不可能碰撞和交互。看起来您在屏幕截图中选择的对象上使用的是
BoxCollider
(3D),而不是
BoxCollider2D
。您提到您曾尝试对您的行使用
BoxCollider2D
EdgeCollider2D
,这两个都是二维碰撞器,不会与三维碰撞器碰撞

问题2 下表总结了碰撞器交互(不包括触发器)

在碰撞中,始终需要至少一个对象才能具有
刚体
组件。另一个对象是否有静态碰撞器、法线
刚体
或运动学
刚体
,取决于您移动/操纵对象的方式

如果直接移动一个对象(通过代码设置每个帧的位置),那么它应该是启用了
iskinetic
刚体

如果设置对象的速度或通过物理力操纵对象,则对象应为规则的
刚体


如果对象从未移动,则通常应为静态碰撞器(无
刚体的碰撞器
).

尝试将linerenderer和gameobject更改为BoxCollizedR2D组件,但仍然不起作用。@Newboy11您是否能够截屏检查您试图进行碰撞的两个对象?还忘了提到您实际上需要Rigidbody2D而不是Rigidbody,原因与您需要2D碰撞器相同。使用
myLine.AddComponent()
将其添加到行中,您需要手动将其中一个添加到另一个对象中。它正在工作。但刚体会导致线条渲染器无法正确移动。将此添加到脚本中,但没有解决问题。var linerb=myLine.GetComponent();linerb.gravityScale=0;linerb.mass=0.0001f;将研究刚体。再次感谢您您是如何移动线条渲染器的?您只是通过脚本更新其位置吗?
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;