沿向量以正弦运动移动对象

时间:2019-09-24 17:44:27

标签: c# unity3d vector

关于如何沿指定的3D向量以正弦方式(如钟摆,但沿线性路径)来回移动对象的任何技巧?我有正弦曲线运动和矢量,但是我不知道如何将两者结合起来。

以下是我拥有的两段代码;向量是使用与原点成角度指定的。

我对编码非常陌生,所以请原谅我在代码中的任何错误。

这使对象绕原点沿正弦路径移动-这是我要沿着3D向量实现的运动。

float rodPositionZsin = pathLength * Mathf.Sin(Time.time) + position;
transform.position = new Vector3(0, 0, rodPositionZsin);

这将使对象沿向量在X和Y维度上移动,但是我对在Z方向上的操作感到困惑。

float Xangle = 20;
float Yangle = 50;
float Zangle = 30;

//Position Transformations
float rodPositionZsin = pathLength * Mathf.Sin(Time.time) + position;
float rodPositionY = Mathf.Cos(Yangle*Mathf.PI/180)*pathLength;
float rodPositionX = Mathf.Sin(Xangle * Mathf.PI / 180)*pathLength;
float rodPositionZ = Mathf.Tan(Zangle * Mathf.PI / 180) * pathLength;
transform.position = Vector2.MoveTowards(transform.position, new Vector2(rodPositionX, rodPositionY), pathLength * Mathf.Sin(Time.time));
rodPositionX = transform.position.x;
rodPositionY = transform.position.y;
rodPositionZ = rodPositionZsin + transform.position.z;
transform.position = new Vector3(rodPositionX, rodPositionY, rodPositionZsin);

1 个答案:

答案 0 :(得分:0)

如果有矢量,只需按正弦曲线对其进行缩放,然后将对象的位置设置为该缩放的矢量。

所以(未经测试的)伪代码:

Vector3 scaledVector = originalVector* Mathf.Sin(Time.time);
youGameObject.transform.position = scaledVector

然后,您可以在正弦函数中添加相位,频率和幅度项,以更改振荡频率,沿该矢量的距离以及振荡的开始位置(如果要进一步自定义)。

编辑:

这里是添加这些内容的方法。

http://jwilson.coe.uga.edu/EMT668/EMT668.Folders.F97/Feller/sine/assmt1.html

a * sin(b * x + c)+偏移量。

其中a是振幅(行进的最大距离) B是波长(1 /振荡频率) C是相位(起始位置),偏移是使整个振荡模式沿矢量移动(使其偏离原点中心)