【问题标题】:Move a game object between two positions in a sin wave在正弦波中的两个位置之间移动游戏对象
【发布时间】:2014-08-21 00:25:22
【问题描述】:

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

有人告诉我,我可以用 sin 波做到这一点,但我不确定如何。有没有简单的方法来做到这一点?

【问题讨论】:

  • 如果物理也不重要,那么您可以使用 iTween。

标签: c# unity3d transform trigonometry


【解决方案1】:

序言

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

正弦函数示例

这是一个例子:

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);
}

为了方便,这里使用余弦而不是正弦。

【讨论】:

    【解决方案2】:

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

    这里是demo video,源代码在Github

    脚本本身非常简单。我们需要做的就是计算两个向量——主方向向量和正交向量。之后,我们需要通过正弦函数从属正交向量,然后将这两个向量相加,这样和就会使物体沿着精确的正弦曲线移动。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多