【问题标题】:Possible to make raycast detect only sides of an object?可以让光线投射仅检测物体的侧面吗?
【发布时间】:2020-01-21 06:47:41
【问题描述】:

我正在尝试在 Unity2d 中创建一种“声音射线投射器”,但我发现了一个问题,即一旦射线进入对象内部,我无法检测到对象的末端在哪里。如果光线投射在对象内部开始,它会立即结束,这不是我想要发生的。有没有办法让光线投射只检测对象的开始/结束?欢迎任何其他解决我的问题的方法!

【问题讨论】:

    标签: c# algorithm unity3d


    【解决方案1】:

    您可以使用光线投射方向并继续向前走一段距离,然后向相反方向投射光线。如果你击中同一个物体,那么你就知道物体在哪里结束。否则增加距离并重试。

    【讨论】:

    • 如果世界上有很多光线,这会不会很慢?另外,我如何确保光线只与一个物体发生碰撞(以防另一个物体挡住)?
    • 当然,您必须考虑如何最小化光线投射的数量。也许您可以将相关对象放在单独的层中?您还需要一个好的起点来进行相反的光线投射。如果你撞到另一个物体,也许你最好从远处开始并靠近一点?还是从小处着手,因为您有很多物品?或者您可以使用Mesh.bounds。您必须评估每次击中并检查是否击中了同一个对象。如果不是:只需使用该位置作为新的起点并再次投射。
    • 我想我可以做到这一点。还有一个问题是,如果对象中间有一个空白空间(如甜甜圈),相反的光线只会检测到对象的末端而不是比甜甜圈里面的点。不过,这应该是一个边缘案例,请尝试实施您的解决方案!
    • 你不能简单地使用对撞机的边界吗?它适用于简单的网格。或者你可以在网格的末端触发对撞机并且只向那些末端投射?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2016-03-17
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多