繁体   English   中英

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

[英]Unity3D - How to move objects in a Sine wave independantly?

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

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.timeMathf.Sin一段代码,这导致使用相同的值,以产生一个正弦波的所有目标。

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

那么,是否有一种方法可以使GameObject以正弦波的方式左右移动并同时向前移动,但又独立地移动,以使它们看起来没有编排? :-)

为了补偿正弦函数的相位(同时保持频率和幅度),您必须在sin(x)中向x 添加一个常数。

因此,您可以尝试transform.position += transform.right * Mathf.Sin (Time.time * 3f + i) * 1f; 是唯一朝着玩家前进的目标。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM