我正在尝试构建一些六边形网格,并且我只是想用OnDrawGizmos可视化一些具有7个Vector3顶点的极简六边形,所以发生了一些奇怪的事情,因为仅出现了五个,从顶部缺少了两个。而且,如果我删除最后两个顶点,则会立即显示前两个顶点。

所以我在控制台中写下了我所有顶点的值,并且感到惊讶,前两个值与后两个值相同,尽管当我声明它们时它们并不相同:

hexVertices[0][0] = new Vector3(-outR/2f, 0, innR);
hexVertices[0][1] = new Vector3(outR/2f, 0, innR);
hexVertices[1][0] = new Vector3(-outR, 0, 0);
hexVertices[1][1] = new Vector3(0, 0, 0);
hexVertices[1][2] = new Vector3(outR, 0, 0);
hexVertices[2][0] = new Vector3(-outR / 2f, 0, -innR);
hexVertices[2][1] = new Vector3(outR / 2f, 0, -innR);


这给了我:

(-0.5, 0.0, -0.9)
(0.5, 0.0, -0.9)
(-1.0, 0.0, 0)
(0.0, 0.0, 0.0)
(1.0, 0.0, 0.0)
(-0.5, 0.0, -0.9)
(0.5, 0.0, -0.9)


...前两个应为正z。我首先想到的是,由于我的顶点存储在三个数组中,我在声明顶点后合并了它们,也许问题就在那里,但事实并非如此。因此,我只写了每行之间的两个顶点的值,以查看发生反转的位置,似乎当声明了hexVertices [2] [0]时,hexVertices [0] [0] .z被反转了,声明hexVertices [2] [0]时,hexVertices [0] [1] .z也是如此。

这是某种奇怪的内存问题,还是我在这里完全错过了什么?

最佳答案

看来您已经解决了,但我将继续写一个答案,以便将问题标记为已解决。

一个好的经验法则是对要制作的每个独立副本使用一个new

将行分为两行将解决您的问题:

hexVertices[i] = new Vector3[nbVerticesMin + i];
hexVertices[nbLines - 1 - i] = new Vector3[nbVerticesMin + i];

关于c# - Vector3.z初始化为正数,然后变为负数,而无需任何脚本修改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53486337/

10-10 11:30