【问题标题】:Unity: Mesh Renderer seems to not fit the Edge perfectlyUnity:Mesh Renderer 似乎并不完美地适合 Edge
【发布时间】:2021-02-05 00:35:08
【问题描述】:

我们目前正在尝试将网格对撞机放置在我们的边缘上,如图所示。问题是网格有时看起来是 2D 而不是 3D(如 Picture 2Picture 3 所示),这使得它们无法从某些相机角度进行选择。有时网格甚至似乎从 Edge 的某些部分消失(Picture 1)。 为碰撞体打开凸面可以让它们更容易选择,但我们真的不想这样做,因为这会让你现在很不清楚你正在选择哪条边。 我们正在通过 bakeMesh 从我们之前创建的边创建我们的网格,如下所示:

LineRenderer lineRenderer = gameEdge.GetComponent<LineRenderer>();
MeshCollider meshCollider = gameEdge.AddComponent<MeshCollider>();
Mesh mesh = new Mesh();
lineRenderer.BakeMesh(mesh, Camera.main, false);
meshCollider.sharedMesh = mesh;
meshCollider.convex = false;

编辑: 我们使用这个https://github.com/mattatz/unity-tubular 在我们的边缘周围生成管状网格,现在工作得很好!

【问题讨论】:

    标签: unity3d mesh


    【解决方案1】:

    线渲染器生成的网格实际上是2D的。我认为您最好的机会是将网格方向更新为面向相机,以便无论您从哪里看,网格都始终面向相机。这样您就可以随时点击它。

    你有两个选择:

    1.- 一直在传递新相机(带有新位置)。这将在Update 中。注意只使用烘焙网格的代码,而不是更新中的Mesh mesh = new Mesh()。因为如果您在 Update 中创建一个新网格,经过一段时间,您将遇到堆栈溢出错误。如果您这样做,我建议您将 Mesh mesh; 设为类变量并仅在类初始化 (mesh = new Mesh();) 中启动它,以便您始终只使用创建的实例来更新网格,而不是创建 @987654327 @每次更新一个。

    2.- 如果你关心效率,你可以在你的相机移动时处理,这样当它停止移动时,你会传入新的相机及其位置。为此,您需要自己处理相机 OnStopMoving 事件以传递新相机,因此每当主相机停止移动时,网格将始终面向它。 这是有道理的,因为用户在停止时更容易点击事物,因此可以假设用户会在不移动时尝试点击线条

    由于可行性,我没有提到第三个选项,即使用原始对撞机包裹线渲染器,并以线的点作为程序对撞机包裹逻辑的起点。但是,您需要编写所有代码,这可能需要一段时间。

    另一方面,据我检查,使其成为凸对撞机是不可行的,因为对撞机本身的行为和形状会随着 MeshRenderer 组件的网格烹饪而改变。检查this 是否有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 2021-06-24
      • 2013-03-19
      相关资源
      最近更新 更多