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

先上代码:

cs 复制代码
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 函数的输出与物体的移动速度相结合来实现。

相关推荐
ArabySide6 分钟前
【WCF】通过AOP实现基于JWT的授权与鉴权的实践
c#·jwt·aop·wcf
恋猫de小郭12 分钟前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin
JosieBook23 分钟前
【Java编程动手学】使用IDEA创建第一个HelloJava程序
java·开发语言·intellij-idea
Thomas_YXQ24 分钟前
Unity3D DOTS场景流式加载技术
java·开发语言·unity
旷世奇才李先生32 分钟前
Ruby 安装使用教程
开发语言·后端·ruby
xiaowu08036 分钟前
C# Task异步的常用方法
c#
阿蒙Amon38 分钟前
C# Linq to Objects 详解:集合处理的终极方案
c#·solr·linq
钢铁男儿42 分钟前
C# 委托(调用带引用参数的委托)
java·mysql·c#
泓博1 小时前
Objective-c把字符解析成字典
开发语言·ios·objective-c
try2find1 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama