You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何围绕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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:45:03