使用 Collider Unity 将线渲染转换为 3d 网格

Posted

技术标签:

【中文标题】使用 Collider Unity 将线渲染转换为 3d 网格【英文标题】:Convert Line Render to 3d Mesh with Collider Unity 【发布时间】:2021-04-10 12:08:00 【问题描述】:

我环顾四周并没有找到有效的答案,因此我们将不胜感激!

当前使用此脚本,该行会创建一个空白网格过滤器。我最接近的是完全不遵循形状网格的偏移简单块。我需要这个以便能够在碰撞时使用线条触发声音绘制形状

GameObject go = new GameObject($"LineRenderer");
goLineRenderer = go.AddComponent<LineRenderer>();  

 Mesh lineBakedMesh = new Mesh(); //Create a new Mesh (Empty at the moment)
go.AddComponent<MeshFilter>();  
go.GetComponent<MeshFilter>().mesh = lineBakedMesh;
 goLineRenderer.BakeMesh(lineBakedMesh,Camera.main, true); //Bake the line mesh to our mesh variable
     go.AddComponent<MeshCollider>().sharedMesh = lineBakedMesh; //Set the baked mesh to the MeshCollider
     go.GetComponent<MeshCollider>().convex = true; //You need it convex if the mesh have any kind of holes

【问题讨论】:

这个问题是关于c#,而不是unityscript。 好的,但我正在使用统一 是的,这是标签unity3d。但是unityscript 是或者更好的是曾经是一种 javascript 风格,类似于早期 Unity 版本中使用的自定义语言,并且正如标签描述所提到的那样,现在早已弃用。您的代码显然是 c# 而不是 unityscript 哦,好的,谢谢你通知我。 【参考方案1】:

在我看来,您正在创建一个新的 LineRenderer 组件,但您没有在其上设置任何点来形成一条线。

您可以使用LineRenderer.SetPosition 设置单个点或LineRenderer.SetPoisitons 在设置LineRenderer.positionCount 的正确目标数量后一次性分配它们。特别是如果您要在运行时更新这些点。

否则,根据您的需要通过Inspector简单地添加和配置组件可能会更容易。


既然你说你已经通过 Inspector 配置了LineRenderer:你可能更愿意使用

goLineRenderer = GetComponent<LineRenderer>();  

为了获取已经添加到与此脚本相同的 GameObjects 的组件?

【讨论】:

您好,线渲染已经设置好,但问题是将线转换为可碰撞的游戏对象 好吧,我们无法判断..在您的代码中您没有...您正在添加一个新组件 当“当前使用此脚本时,该行会创建一个空白网格过滤器。”我正在使用已经成功创建该行的 GitHub 脚本。可能没有写清楚对不起。问题在于生成一个网格过滤器和碰撞器,它遵循 Linerenderer 制作的线条 然后请添加您实际使用的代码。您发布的那个创建了一个新添加的 LineRenderer 并且没有任何添加点的证据。如前所述,这可能是问题所在吗?您更愿意使用GetComponent 等等。你看到代码说明了吗,goLineRenderer.BakeMesh(lineBakedMesh,Camera.main, true);等等......请再次检查问题。

以上是关于使用 Collider Unity 将线渲染转换为 3d 网格的主要内容,如果未能解决你的问题,请参考以下文章

unity, Collider2D.attachedRigidbody

Unity -- Collider(碰撞器与触发器)

Unity3d -- Collider(碰撞器与触发器)

Unity碰撞器触发关系测试

Unity3d — — UGUI之Box Collider自适应大小

Unity 3D 碰撞体(Collider)|| Unity 3D 触发器(Trigger)