用 Vector3.Slerp 控制圆弧轴
Controlling arc axis with Vector3.Slerp
我正在使用 Vector3.Lerp()
实例化一些相互之间设定距离的预制件。这行得通,但我刚开始玩 Vector3.Slerp
.
这会创建一个漂亮的弧线,但是我希望弧线发生在 X 轴或 Z 轴上,而不是 Y 轴上。因此,预制件不会在空中形成弧形,而是保持与地面接触所有时间。
我一直在阅读 euler local transforms
,但我不确定这是否正确。
如果有人可以提供一些建议或意见,我将不胜感激。
我做了一些修改(并且不能声称到目前为止完全理解推理,或者这是否是唯一的解决方案)但似乎只要开始和结束输入 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;
}
我正在使用 Vector3.Lerp()
实例化一些相互之间设定距离的预制件。这行得通,但我刚开始玩 Vector3.Slerp
.
这会创建一个漂亮的弧线,但是我希望弧线发生在 X 轴或 Z 轴上,而不是 Y 轴上。因此,预制件不会在空中形成弧形,而是保持与地面接触所有时间。
我一直在阅读 euler local transforms
,但我不确定这是否正确。
如果有人可以提供一些建议或意见,我将不胜感激。
我做了一些修改(并且不能声称到目前为止完全理解推理,或者这是否是唯一的解决方案)但似乎只要开始和结束输入 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;
}