在我的游戏中,我的目标会产生并以直线向玩家移动。我使用这段代码:
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
在正弦波中左右移动并同时向前移动,但是它们是独立的,所以看起来不是那么精心设计的? : - )
答案 0 :(得分:0)
为了抵消正弦函数的相位(同时保持频率和幅度),你必须将一个常数加到sin(x)中的x。
所以你可以尝试transform.position += transform.right * Mathf.Sin (Time.time * 3f + i) * 1f;
i 对于移动到玩家的目标是唯一的。