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

时间:2014-06-30 15:14:02

标签: c# unity3d transform sine

我在团结场景中有两个位置,我想要一个球形游戏对象在它们之间移动。这对于向命令移动很容易,但我想要发生的是在离开时要加速的球,然后在受控曲线中接近下一个时减速。我需要它在一个庄园中的两个位置之间进行密切,这个位置类似于被滚动的球。

有人告诉我,我可以用浪潮做到这一点,但我不确定如何。有一种简单的方法可以做到这一点吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

我面临着几乎相同的任务。我的物体位于随机位置,其中两个之间的线与轴不平行。所以,我创建了可以帮助任何人的通用解决方案。

以下是demo videoGithub上的源代码。

脚本本身非常简单。我们需要做的就是计算两个向量 - 主方向向量和正交向量。在此之后我们需要通过正弦函数从属于正交向量,然后执行这两个向量的加法,因此求和将按照正确的正弦曲线移动对象。

void FixedUpdate () {
    float t = Time.time - startTime;
    rb.velocity = direction * speed + orthogonal * amplitude * Mathf.Sin (frequency * t);
}

您可以找到更多details here - 如何设置场景,组件等