Bootstrap

unity3d————三角函数练习题

先上代码:
 

public class SinCos : MonoBehaviour
{
    public float moveSpeed = 10f;   //前进的速度

    public float changValue = 5f;   //左右的速度
    public float changeSize = 5f;   //左右的幅度

    float time = 0;

    void Update()
    {
        this.transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);  //前进

        time += Time.deltaTime * changValue;
        this.transform.Translate(Vector3.right * Mathf.Sin(time) * changeSize * Time.deltaTime);
    }
}

第一: 首先要明确  在unity3d中物体是如何平滑移动的,我们才能在场景中看见移动的轨迹,看下面的介绍

在Unity3D中,一个物体朝着某个方向移动时,其移动的距离是由速度(speed)和时间(time)共同决定的。这里的“方向”是一个单位向量,表示物体移动的方向,而速度则是一个标量,表示物体每秒移动的距离。时间通常是指上一帧到当前帧的时间间隔,即Time.deltaTime,它确保了物体的移动是平滑的且与帧率无关。

将方向、时间和速度相乘得到的是物体在这一帧内应该移动的距离。这是因为:

  • 方向:提供了物体移动的方向,通常是一个单位向量(长度为1的向量)。
  • 速度:定义了物体每秒移动的距离或速度的大小。
  • 时间:指的是物体移动所经过的时间。在Unity中,这通常是Time.deltaTime,它表示上一帧到当前帧的时间间隔。

将这三者相乘,我们可以得到物体在这一帧内应该沿着指定方向移动的距离。这是因为距离等于速度乘以时间(distance = speed * time),而方向则确定了这个距离是沿着哪个方向移动的。

搞懂这个概念我们再看上面代码,前进给了一个速度,因为我们是要实现物体能够先正弦函数或者余弦函数的轨迹一样,那我们根据物理知识,我们需要前进速度跟左右速度叠加起来那么就是我们想要的结果,比如正弦函数,有移动频率,振幅大小,那我们就需要一个sin函数就行了 ,sin函数范围是-1 到 1 在 * 振幅(changeSize)就可以调节他们的振幅,频率就通过改变changevalue,changeValue 变大 Sin函数频率就会越快,方向 频率 振幅 时间 都有了就可以平滑的看到物体的曲线移动轨迹。

如果不清楚可以看看这个:

在数学和物理中,"频率" 和 "速度" 是两个不同但相关的概念,尽管它们在某些上下文中可能表现出相似的特性。

  1. 频率:在波动(如正弦波、余弦波)的上下文中,频率是指单位时间内波形重复的次数,通常用赫兹(Hz)表示。在正弦函数 sin(x) 中,如果 x 代表时间,那么频率决定了波形振荡的快慢。频率越高,波形振荡得越快。在Unity的上下文中,如果你使用 sin(time * frequency),这里的 frequency 会影响正弦波形变化的快慢,即物体左右摆动的快慢。

  2. 速度:在直线运动中,速度是指单位时间内物体移动的距离,通常用米/秒(m/s)或其他类似的单位表示。在Unity中,速度通常用于描述物体在三维空间中的移动快慢,比如一个物体每秒沿着某个方向移动多少米。

当你将 sin 函数应用于物体的移动时,你实际上是在创建一个周期性的运动,而不是直线运动。在这个情况下,sin 函数的"频率"决定了物体左右摆动的快慢,而不是它沿直线移动的速度。然而,如果你将 sin 函数的输出用作物体在某一方向上的速度(例如,通过将其乘以某个系数来调整速度的大小),那么 sin 函数的频率将间接影响物体在该方向上的移动快慢,因为频率越高,速度值变化得越快,从而导致物体移动得越快(但方向会不断变化)。

总结一下,sin 函数的频率和直线移动中的速度是两个不同的概念,但在某些情况下,sin 函数的频率可以影响物体在某一方向上的速度变化,从而间接影响物体的移动。在Unity中,如果你想要创建一个以正弦波形方式移动的物体,你需要将 sin 函数的输出与物体的移动速度相结合来实现。

;