Unity3D - 如何独立地移动正弦波中的对象?

时间:2016-06-03 12:47:43

标签: c# unity3d sine

在我的游戏中,我的目标会产生并以直线向玩家移动。我使用这段代码:

transform.LookAt(target.transform);
transform.position = Vector3.MoveTowards(transform.position, target.transform.position, speed);

这使得目标在玩家身上并向他们移动。

我决定尝试让它们在一个正弦波中移动,所以它看起来不像直线那么无聊,我添加了一行代码,现在变为:

transform.LookAt(target.transform);
transform.position = Vector3.MoveTowards(transform.position, target.transform.position, speed);
transform.position += transform.right * Mathf.Sin (Time.time * 3f) * 1f;

现在这很有效,我的敌人在向玩家移动时左右移动,除了它们都同时沿着相同的路径移动,导致一大群目标在一个精心编排的情况下左右移动方式。

我相信这是因为我在Time.time代码段中使用Mathf.Sin,这导致所有目标使用相同的值来生成正弦波。

我已尝试更改为Time.deltaTime并将Time.time变量更改为2个数字之间的Random.Range变量,但它们要么不起作用,阻止我的目标移动,或使它们看起来像是在振动。我也尝试过使用动画,但由于我的MoveTowards代码,这也不起作用。

那么,有没有办法让GameObject在正弦波中左右移动并同时向前移动,但是它们是独立的,所以看起来不是那么精心设计的? : - )

1 个答案:

答案 0 :(得分:0)

为了抵消正弦函数的相位(同时保持频率和幅度),你必须一个常数加到sin(x)中的x。

所以你可以尝试transform.position += transform.right * Mathf.Sin (Time.time * 3f + i) * 1f; i 对于移动到玩家的目标是唯一的。

另请参阅:https://en.wikipedia.org/wiki/Sine_wave