【问题标题】:Checking if linerenderer collided with a gameobject检查 linerenderer 是否与游戏对象碰撞
【发布时间】:2019-05-13 10:24:13
【问题描述】:

我想检查由 linerenderer 创建的线条是否与游戏对象发生碰撞。我尝试将 boxcollider2d、edgecollider2d 组件添加到 linerenderer 但不起作用。这条线从上到下移动。游戏对象也有一个 boxcollider。

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

linerenderer 将碰撞到的游戏对象

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

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;

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

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

    问题 1

    2D 和 3D 对撞机不可能发生碰撞和交互。看起来您在屏幕截图中选择的对象上使用的是 BoxCollider (3D) 而不是 BoxCollider2D。您提到您尝试使用BoxCollider2DEdgeCollider2D 到您的线路,它们都是2D 碰撞器,不会与您的3D 碰撞器发生碰撞。

    问题 2

    下表总结了对撞机交互(不包括触发器)。

    您总是需要至少有一个发生碰撞的对象才能拥有Rigidbody 组件。对于另一个对象,您是否有静态碰撞器、普通 Rigidbody 或运动学 Rigidbody 将取决于您如何移动/操纵对象。

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

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

    如果物体从不移动,它通常应该是一个静态碰撞器(没有Rigidbody的碰撞器)。

    【讨论】:

    • 尝试将 linerenderer 和 gameobject 更改为 boxcollider2d 组件,但仍然不起作用。
    • @Newboy11 你能截取你想要碰撞的两个对象的检查器吗?
    • 还忘了提到您实际上需要 Rigidbody2D 而不是 Rigidbody,原因与您需要 2D 对撞机的原因相同。使用myLine.AddComponent&lt;Rigidbody2D&gt;(); 将其添加到您的行中,您需要手动将一个添加到您的其他对象中。
    • 它现在可以工作了。但是刚体导致衬里渲染器无法正常移动。将此添加到脚本中,但不能解决问题。 var linerb = myLine.GetComponent(); linerb.gravityScale = 0; lineb.mass = 0.0001f;将研究刚体。再次感谢
    • 你是如何移动 linerenderer 的?你只是通过脚本更新它的位置吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    相关资源
    最近更新 更多