【问题标题】:Controlling arc axis with Vector3.Slerp用 Vector3.Slerp 控制圆弧轴
【发布时间】:2017-08-01 20:47:04
【问题描述】:

我正在使用Vector3.Lerp() 来实例化一些彼此相距一定距离的预制件。这行得通,但我刚刚开始玩Vector3.Slerp

这会创建一个漂亮的弧线,但是我希望弧线发生在 X 轴或 Z 轴上,而不是 Y 轴上。因此,预制件不会在空中形成弧线,而是始终与地面保持接触.

我一直在阅读euler local transforms,但我不完全确定这是否正确。

如果有人能提供一些建议或意见,我将不胜感激。

【问题讨论】:

  • 您是否可以选择使用RotateAround()
  • 我去看看,谢谢。

标签: c# unity3d lerp


【解决方案1】:

我做了一些修改(目前还不能声称完全理解推理,或者这是否是唯一的解决方案)但似乎只要开始和结束输入 Slerp 向量的 y 分量是零,物体将仅在 xz 平面中行进。下面是一个例子:

Vector3 startpos;
Vector3 endpos;
Vector3 yoffset;
float t;

void Start() 
{
    startpos = new Vector3(-5, 2, 0);
    endpos = new Vector3(3, 2, 2);
    yoffset = new Vector3(0, 2, 0);
}


void Update()
{
    t = (t+Time.deltaTime);
    transform.position = Vector3.Slerp(startpos - yoffset, endpos - yoffset, t/5f);
    transform.position += yoffset;
}

【讨论】:

  • 你知道吗,我也不完全确定它是如何工作的,但确实如此。谢谢!我希望 Slerp 只是在某个地方过载来控制它,但这似乎可以完成工作。我会再玩一会儿。
  • 我认为这是因为 slerp 没有将开始和结束向量 3 视为点并在它们之间进行插值 - 它将它们视为向量并插值它们的角度和大小。如果您的向量的 y 分量为零,则它们之间的任何角度插值将始终位于 xz 平面上。如果不是,则不保证,即使 start 和 end 的 y 分量相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多