c# - Vector3.z 初始化为正,但随后在没有任何脚本修改的情况下变为负

标签 c# unity3d

我正在尝试构建一些六边形网格,当我试图使用 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/

相关文章:

c# - 统一: What's allocating memory in my function?

c# - 如何解析不同类型服务的 IEnumerable

c# - 在更长的序列中查找子序列

c# - 从 C# 函数返回一个大字符串是否可以 - 返回值最终会出现在调用堆栈中吗?

c# - Automapper 在第一次调用时正确映射,但在第二次调用时跳过属性

c# - Mod_Color.cs(55,55) : Error CS0241: Default parameter specifiers are not permitted (CS0241) (Assembly-CSharp)

c# - Unity 3d 持久数据,保存文件没有按预期出现

c# - 有没有更有效的方法来禁用多个脚本,同时在 Unity 中的单个游戏对象上保持一些事件?

c# - 从 List<Vector3> 返回较小的向量

c# - C#代码中的美元符号是什么意思?