Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 如何降低正弦波的速度?_Unity3d_Trigonometry - Fatal编程技术网

Unity3d 如何降低正弦波的速度?

Unity3d 如何降低正弦波的速度?,unity3d,trigonometry,Unity3d,Trigonometry,我想编程一个弹跳球。实际的反弹不应该遵循真正的物理定律,而是建立一个绝对正弦波。就像在这张照片里 到目前为止,这很容易。见所附代码 但是,我想在按下按钮时,使球的移动速度减慢 我将降低移动速度,这将减慢x轴上的变换。但由于正弦波的频率和大小都没有改变,球仍然在上下快速反弹。但当我改变其中一个或两者时,这将以一种奇怪的行为结束 假设球在上下距离的20%处向下移动。当我现在更改任何正弦参数时,球将立即在y轴上移动,这看起来很奇怪,也不平滑 因此,我的实际问题是:我如何才能在没有起伏运动的情况下减慢

我想编程一个弹跳球。实际的反弹不应该遵循真正的物理定律,而是建立一个绝对正弦波。就像在这张照片里

到目前为止,这很容易。见所附代码

但是,我想在按下按钮时,使球的移动速度减慢

我将降低移动速度,这将减慢x轴上的变换。但由于正弦波的频率和大小都没有改变,球仍然在上下快速反弹。但当我改变其中一个或两者时,这将以一种奇怪的行为结束

假设球在上下距离的20%处向下移动。当我现在更改任何正弦参数时,球将立即在y轴上移动,这看起来很奇怪,也不平滑

因此,我的实际问题是:我如何才能在没有起伏运动的情况下减慢绝对正弦波(x/y轴平移)?

float _movementSpeed = 10.0f;
float _sineFrequency = 5.0f;
float _sineMagnitude = 2.5f;

Vector3 _axis;
Vector3 _direction;
Vector3 _position;

void Awake()
{
    _position = transform.position;
    _axis = transform.up;
    _direction = transform.right;
}

void Update()
{
    _position += _direction * Time.deltaTime * _movementSpeed;
    // Time.time is the time since the start of the game
    transform.position = _position + _axis * Mathf.Abs(Mathf.Sin(Time.time * _sineFrequency)) * _sineMagnitude;
}
我猜你想要这个(更多红色-频率更低,更多蓝色-频率更高):

实现这一点的最简单方法是缩放deltatime,例如,它是通过以下方式生成的:

使用UnityEngine;
使用系统集合;
公共阶层反弹:单一行为{
//用于可视化结果
公共图;
[范围(0,10)]
公共浮动频率=1;
浮动t;
无效更新()
{
t+=时间增量时间*频率;
浮点数y=Mathf.Abs(Mathf.Sin(t));
浮动时间=time.realtimeSinceStartup;
graph.AddPoint(时间,y,Color.Lerp(Color.red,Color.blue,频率/10));
}
}
对于完整性,
图形
类:

使用UnityEngine;
使用System.Collections.Generic;
公共类图:单行为{
结构PosAndColor
{
公共向量机3 pos;
公共色彩;
}
列表值=新列表();
公共无效添加点(浮动x、浮动y、颜色c)
{
Add(newposandcolor(){pos=newvector3(x,y,0),color=c});
}
void OnDrawGizmos()
{
for(int i=1;i


另一种方法是用正弦偏移量改变频率,以匹配当前振幅。我想你不需要这个,但是如果你想的话,我可以发布更多关于这个主题的文章。

y方向的速度不是完全取决于x方向的速度吗?