制作具有等距顶点的球体

Mat*_*ian 8 c# math geometry unity-game-engine

我正在尝试制作一个球形爆发射线以检查碰撞,但是根据每条射线撞击的内容或位置发生特定的相互作用.因此,为什么我使用光线而不是更简单的东西,如OverlapSphere.

我正在寻找如何制作球体的原因是因为我可以使用相同的数学计算我的光线,让它们到达球体所在的顶点.但是我能找到制作球体的每一种方式都会让线条越来越接近极点,这很有意义,因为它很容易做到.但是你可以想象,它对我当前的项目没那么有用.

TL; DR: 如何制作具有等距顶点的球体?如果它的罚款不完全等距,它只需要非常接近.如果发生这种情况,如果你可以给出差异的多少,以及在哪里,如果适用,那将是很好的.

附加说明: 我看这个这个,但数学方法在我头上,所以我一直在寻找可能刚刚被这整个时间盯着我的脸.

Eli*_*ard 5

你可以使用一个icosphere.由于顶点分布在等边三角形上,因此保证顶点等距.

在此输入图像描述

要构建icosphere,首先要制作一个二十面体,然后按照本文中的说明以小三角形递归地分割这些面.


Fat*_*tie 5

你是否意识到Unity给你的球体实际上是设计的

记住这个确切的目标?

也就是说,内置于Unity的球体的整个存在理由是这些点是相当平滑的空间......大致等距,正如你所说的那样.

在此输入图像描述

要在Unity中创建这样的球体,只需执行以下操作:

在此输入图像描述

如您所知,您可以立即访问顶点

Mesh mesh = GetComponent<MeshFilter>().mesh;
Vector3[] vv = mesh.vertices;
int kVerts=vv.Length
for (int i=0; i<kVerts; ++i)
  Debug.Log ... vv[i] 
Run Code Online (Sandbox Code Playgroud)

请注意,您可以轻松检查它们所在的"球体的哪个部分"(例如)检查它们与"城市"(或其他)的距离,或者只检查(例如)z值以查看它们是哪个半球在..等等.


此外...

请注意.关于你想要这样做的总体原因:

但是根据每条射线命中的位置或位置发生特定的相互作用

请注意,使用PhysX执行此操作并不容易.(Unity中完全内置的游戏物理.)事实上,我从来没有看过碰撞而没有根据"击中的地方"做某些"具体"的事情.

例如,您可以获得联系人所在的位置http://docs.unity3d.com/ScriptReference/RaycastHit-point.html

值得注意的是,在休闲编程中可以写出接近PhysX性能的东西是绝对不可思议的.

我希望这会让事情变得更容易!