Building/placing 统一对象系统
Building/placing objects system in unity
所以我正在尝试制作一个统一的系统,让您能够构建。互联网上的大多数教程都可以让您放置预制件。这不是我的目标。我正在尝试制作一个系统,(我不知道如何描述它)当你点击时,它会操纵一个网格,沿着光线投射的法线方向延伸。我在 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.
}
}
我试过:
- 向网格添加顶点,然后更改其他顶点的位置。
- 改变世界网格。
- 复制预制件,然后将其位置设置为光线投射点。
只有第二次我才开始工作,而且(我认为)如果你经常做的话会让它变慢。列出的任何想法是否可用,如果可用,我将如何做。如果没有,我会怎样?如果有人能帮助我实现这一点,我将不胜感激。
我假设他们使用的算法是 Marching Cubes (It is mentioned in the video). It is a surface extraction algorithm that produces isometric shapes from adding or removing vertices to a polygonal mesh. I implemented a version of the algorithm in my game Eira Echoes of Adventure(预告片中的 ~0:36 展示了地形改造)。
我不会详细介绍它是如何工作的,因为已经有很多 information out there。还有许多其他类似的算法采用不同的方法来生成网格,例如双轮廓、立方体行进方块和 EMC。使用一个与另一个的原因有多种,但由于您只是想要一个产生相似结果的解决方案,MC 是一种可靠的算法作为您的第一个表面提取算法。
我认为你不想深入了解它的工作原理,我将提供一个 Open source Unity implementation 的 MC。随着 MC 最近变得非常流行,论文、视频、开源项目等的数量急剧增加。如果您想要我用于实现的更多链接,我可以提供它们用于研究,但我相信我链接的开源项目具有可靠的实现以及页面底部链接的一些资源。
你提到的另一部分是滞后。是的,大型动态网格可能会滞后。有许多优化,例如动态遮挡、网格分块、任何网格都没有背面、用于网格计算的统一作业系统、线程渲染的较新的 Unity 渲染管道等。
为了展示表面提取算法的其他几个例子,这里是 Cubical Marching Squares and here's a really cool voxel engine made by Atomontage 的一个实现。许多人认为我们正在逐渐远离多边形并转向基于体素的实现。 Atomontage 就是这样一家公司,它拥有令人难以置信的实时可破坏网格。与你的问题有点相切,但我想我会包括一些其他来源来展示可以实现的深度。
所以我正在尝试制作一个统一的系统,让您能够构建。互联网上的大多数教程都可以让您放置预制件。这不是我的目标。我正在尝试制作一个系统,(我不知道如何描述它)当你点击时,它会操纵一个网格,沿着光线投射的法线方向延伸。我在 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.
}
}
我试过:
- 向网格添加顶点,然后更改其他顶点的位置。
- 改变世界网格。
- 复制预制件,然后将其位置设置为光线投射点。
只有第二次我才开始工作,而且(我认为)如果你经常做的话会让它变慢。列出的任何想法是否可用,如果可用,我将如何做。如果没有,我会怎样?如果有人能帮助我实现这一点,我将不胜感激。
我假设他们使用的算法是 Marching Cubes (It is mentioned in the video). It is a surface extraction algorithm that produces isometric shapes from adding or removing vertices to a polygonal mesh. I implemented a version of the algorithm in my game Eira Echoes of Adventure(预告片中的 ~0:36 展示了地形改造)。
我不会详细介绍它是如何工作的,因为已经有很多 information out there。还有许多其他类似的算法采用不同的方法来生成网格,例如双轮廓、立方体行进方块和 EMC。使用一个与另一个的原因有多种,但由于您只是想要一个产生相似结果的解决方案,MC 是一种可靠的算法作为您的第一个表面提取算法。
我认为你不想深入了解它的工作原理,我将提供一个 Open source Unity implementation 的 MC。随着 MC 最近变得非常流行,论文、视频、开源项目等的数量急剧增加。如果您想要我用于实现的更多链接,我可以提供它们用于研究,但我相信我链接的开源项目具有可靠的实现以及页面底部链接的一些资源。
你提到的另一部分是滞后。是的,大型动态网格可能会滞后。有许多优化,例如动态遮挡、网格分块、任何网格都没有背面、用于网格计算的统一作业系统、线程渲染的较新的 Unity 渲染管道等。
为了展示表面提取算法的其他几个例子,这里是 Cubical Marching Squares and here's a really cool voxel engine made by Atomontage 的一个实现。许多人认为我们正在逐渐远离多边形并转向基于体素的实现。 Atomontage 就是这样一家公司,它拥有令人难以置信的实时可破坏网格。与你的问题有点相切,但我想我会包括一些其他来源来展示可以实现的深度。