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

相关推荐
csbysj20203 分钟前
Python 循环嵌套
开发语言
深蓝海拓5 分钟前
PySide6从0开始学习的笔记(二十六) 重写Qt窗口对象的事件(QEvent)处理方法
笔记·python·qt·学习·pyqt
测试_AI_一辰5 分钟前
Agent & RAG 测试工程05:把 RAG 的检索过程跑清楚:chunk 是什么、怎么来的、怎么被命中的
开发语言·人工智能·功能测试·自动化·ai编程
Coding茶水间8 分钟前
基于深度学习的输电电力设备检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
清风~徐~来12 分钟前
【视频点播系统】BRpc 介绍及使用
开发语言
啟明起鸣14 分钟前
【C++ 性能提升技巧】C++ 的引用、值类型、构造函数、移动语义与 noexcept 特性,可扩容的容器
开发语言·c++
故以往之不谏15 分钟前
函数--值传递
开发语言·数据结构·c++·算法·学习方法
卢锡荣29 分钟前
Type-c OTG数据与充电如何进行交互使用应用讲解
c语言·开发语言·计算机外设·电脑·音视频
A懿轩A42 分钟前
【Java 基础编程】Java 变量与八大基本数据类型详解:从声明到类型转换,零基础也能看懂
java·开发语言·python