在正弦波中将游戏对象移动到两个位置之间

3
我在Unity场景中有两个位置,我想让一个球体游戏对象在它们之间移动。使用move towards命令很容易实现,但是我想要的是球在离开一个位置时加速,然后在接近下一个位置时以控制曲线减速。我需要让它在两个位置之间振荡,就像滚动的球一样。
我被告知可以使用正弦波来实现这一点,但我不确定如何做。是否有简单的方法可以实现?

如果物理效果对你不是很重要,那么你可以使用iTween。 - apxcode
2个回答

4

前言

解决问题的方法有很多种,不仅仅是使用正弦函数。

正弦函数示例

下面是一个示例:

public float frequency = 1.0f; // in Hz
public Vector3 positionA;
public Vector3 positionB;
private float elapsedTime = 0.0f;

public void Update()
{
    elapsedTime += Time.deltaTime;
    float cosineValue = Mathf.Cos(2.0f * Mathf.PI * frequency * elapsedTime);
    transform.position = positionA + (positionB - positionA) * 0.5f * (1 - cosineValue);
}

这里使用余弦函数而不是正弦函数,只是为了方便起见。

1
我面临着几乎相同的任务。我的对象位于随机位置,两个对象之间的线不平行于轴线。因此,我创建了通用解决方案,可以帮助任何人。
这里有演示视频,源代码在Github上。
脚本本身非常简单。我们所需要做的就是计算两个向量-主方向向量和正交向量。之后,我们需要通过正弦函数来从属正交向量,然后执行这两个向量的加法,这样总和将沿着精确的正弦曲线移动对象。
void FixedUpdate () {
    float t = Time.time - startTime;
    rb.velocity = direction * speed + orthogonal * amplitude * Mathf.Sin (frequency * t);
}

你可以在这里找到更多 详细信息 - 如何设置场景、组件等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接