c# - 在运行时更新网格对撞机的替代方案?

标签 c# unity3d collision-detection mesh

我正在开发用户在运行时(一直)生成网格的游戏,因此网格有很多顶点,同时有一个 GameObject - 玩家需要在它位于生成的区域时触发事件运行时网格。

游戏中的相机是 3D 的,但生成的网格是平面的。在我的附图中,我在顶 View 中显示了它,以更好地展示它的外观。

现在我每隔几秒就更新一次 Mesh Collider,但是在生成的网格有越来越多的顶点后它非常慢。

我相信这是一种非常简单的碰撞方法,所以也许有任何其他方法可以检测到这种情况,而不是附加到动态生成的网格的网格碰撞器?

更新 #1

我知道 Mesh Collider 很慢,不应该在运行时更新。我也知道应该使用像 box collider 这样的原语的想法。

但是在这种情况下,当这个平面网格每秒更新一次(并且它会增长)时,将有数千个盒子碰撞器,并且每秒都需要添加新的。这种方法也行不通。

更新#2

我的第二个想法是找到离玩家最近的三角形并为它们创建碰撞器(盒子碰撞器应该是最快的)。但我真的不知道从哪里开始,甚至不知道从哪里开始?有人吗?

Drawing 2, as an answer for @Hristo

Drawing

最佳答案

如果网格碰撞器适用于小部分而不是全长,则生成多个网格碰撞器,当玩家绘制更长的路径时,每 X 个多边形或 X 条路径断开一个新的碰撞器。

关于c# - 在运行时更新网格对撞机的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43598053/

相关文章:

c# - 在 EFCore 中使用 DBContext 进行查询时,什么会导致 "Collection is read-only"异常?

unity3d - 在运行时从 persistentDataPath 加载音频(Unity3d WebGL)

c# - 类型 ApplicationUser 不能用作泛型类型或方法 'TUser' 中的类型参数 'IdentityDbContext<TUser>'

c# - 在决定是否创建另一个 Visual Studio 项目 (.NET) 时应使用什么标准?

c# - 在其他对象上显示 2D 对象 (Unity)

vector - 如何检测两个点向量(C++)中任意两点之间的碰撞?

java - 我可以为对象的每个实例创建一个循环吗?

javascript - 碰撞检测函数始终返回 true

c# - 检索字符串中括号内的键

android - Unity 2020 无法将 android APK 更新到 API 级别 29