统一构建/放置对象系统

时间:2021-04-27 01:08:19

标签: c# unity3d mesh

所以我试图建立一个统一的系统,让你能够构建。互联网上的大多数教程都是这样做的,因此您可以放置​​预制件。这不是我的目标。我正在尝试制作一个系统,(我不知道如何描述它)当您单击时,它将操纵网格,在光线投射命中的法线方向上延伸。我在 YouTube 上看到有人这样做(我不知道这是不是他们的方法,但看起来像),但他们没有对此进行解释。 video。他说“你只会增加元音距离,很简单,对;不是真的”在那之后,他展示了我的目标。我试过编码(没花多久):

public LayerMask mask;

void Update(){
 if (Input.GetKeyDown(KeyCode.Mouse0)){
  RaycastHit hit;
  Physics.Raycast(transform.position, transform.forward, out hit, 2, mask);
  // here is where I got stuck.
  }
}

我试过了:

  • 向网格添加顶点,然后更改其他顶点的位置。
  • 改变世界网格。
  • 复制预制件,然后将其位置设置为光线投射点。

我只有第二次完成工作,而且(我认为)如果你做很多事情会变得迟钝。列出的任何想法是否可用,如果是,我将如何做。如果不是,我该怎么办?如果有人能帮助我实现这一目标,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我假设他们使用的算法是 Marching Cubes (It is mentioned in the video)。它是一种表面提取算法,可通过向多边形网格添加或删除顶点来生成等距形状。我在我的游戏 Eira Echoes of Adventure 中实现了该算法的一个版本(预告片中大约 0:36 展示了地形改造)。

我不会深入探讨它是如何工作的,因为已经有大量的 information out there。还有许多其他类似的算法,它们采用不同的方法来生成网格,例如双重轮廓、立方行进正方形和 EMC。使用一个或另一个的原因有多种,但由于您只想要一个产生类似结果的解决方案,MC 是一种可靠的算法,作为您的第一个表面提取算法。

因为我认为您不想深入了解它的工作原理,所以我将提供 MC 的 Open source Unity implementation。随着 MC 最近越来越流行,论文、视频、开源项目等的数量急剧增加。如果你想要更多我用于我的实现的链接,我可以提供它们以供研究,但我相信我链接的开源项目有一个可靠的实现以及页面底部链接的一些资源。

您提到的另一部分是滞后。是的,大型动态网格可能会滞后。有许多优化,例如动态遮挡、网格分块、任何网格没有背面、网格计算的统一作业系统、线程渲染的较新 Unity 渲染管道等。

为了展示其他一些表面提取算法的例子,这里是 Cubical Marching Squares 的一个实现,这里是一个由 Atomontage 制作的非常酷的体素引擎。许多人争辩说,我们正在逐渐远离多边形,转向基于体素的实现。 Atomontage 就是这样的一家公司,它拥有令人难以置信的实时可破坏网格。您的问题有点切线,但我想我会包括一些其他来源来展示可以实现的深度。

相关问题