如何围绕3D空间内的给定向量方向轴等间距放置指定数量的点
解决方案
你可以直接使用Unity内置的四元数旋转API实现,不需要手动推导复杂的旋转矩阵,修改后的代码如下:
// 先计算旋转量:将原始圆的默认旋转轴转到你指定的方向轴 // 你的原始代码生成的圆在Y-Z平面,默认旋转轴是X轴(Vector3.right) Quaternion axisRotation = Quaternion.FromToRotation(Vector3.right, targetDirection); for (int i = 0; i < detail; i++) { float angle = i * Mathf.PI * 2f / detail; // 生成原始平面上的点 Vector3 vert = new Vector3(0, Mathf.Sin(angle) * size, Mathf.Cos(angle) * size); // 应用旋转,将点转到目标方向轴对应的平面上 vert = axisRotation * vert; // 叠加位置偏移 verticies[i] = vert + position; }
原理解释
- 你原来的代码生成的所有点都在Y-Z平面上,这个平面的法线(也就是圆的旋转轴)是X轴正方向。
Quaternion.FromToRotation会返回一个四元数,代表从第一个向量方向转到第二个向量方向需要的旋转量。- 用这个四元数乘以原始点的坐标,就可以把整个圆的平面旋转到法线和你指定的
direction方向重合,实现绕目标轴生成环形点的效果。
注意事项
如果你的targetDirection可能为零向量,需要提前做判断跳过计算,否则Unity会抛出异常。
内容的提问来源于stack exchange,提问作者czarmin
相关产品推荐
相关产品推荐

