在破砖游戏中提高球的速度

时间:2019-06-11 23:39:44

标签: unity3d

只是开始演奏Tuto,并且我想不断提高球的速度,但是该死的我对数学太烂了,我什至不知道该怎么做,这是我目前的工作:

 // I'm giving the first force (random x) when you engage the ball, in the Start method
 System.Random xForce = new System.Random();
 rigidBody.AddForce(new Vector2(xForce.Next((int)-speed, (int)speed), speed);

 // Later, in the Update code, I use this
 rigidBody.AddForce(rigidBody.velocity* speedUp);

speed和speedUp是公共变量。

当我施加第一力时,我感到困扰的是,我猜Vector2(速度,速度)会比(0,速度)对的球更快吗?因此,我想要一种改变力量方向的方法,但是以相同的速度吸引玩家的视线。

此外,当我提高速度时,我会进行speed * speedUp,这意味着(我仍然猜想),Vector2(速度,速度)将增加超过(0,速度)对吗?所以无论球的方向如何,我都希望以相同的方式增加它。

我不知道我是否很清楚,我读过一个线程上的标准化向量,但是我不明白,这就是为什么我要问你的帮助人员,在此先谢谢你!

2 个答案:

答案 0 :(得分:0)

此行的括号不平衡:

rigidBody.AddForce(new Vector2(xForce.Next((int)-speed, (int)speed), speed);

此外,您可能希望使用浮点数而不是整数。 尝试以下方法:

System.Random xForce = new System.Random();
rigidBody.AddForce(new Vector2(xForce.NextDouble()*speed,
                               xForce.NextDouble()*speed));

最后一行看起来不错:

rigidBody.AddForce(rigidBody.velocity* speedUp);

答案 1 :(得分:0)

好的,经过大量研究,我需要确定速度矢量的长度,然后使用Vector2.ClampMagnitude函数获得了它:

System.Random xForce = new System.Random();
Vector2 direction = new Vector2(xForce.Next((int)-speed, (int)speed), speed);
Vector2 cappedDirection = (Vector2.ClampMagnitude(direction, speed));
rigidBody.AddForce(cappedDirection, ForceMode2D.Impulse);

然后在我的更新代码中,似乎只需要使用归一化向量即可。根据我的读物,向量的归一化版本将方向保持为1:

rigidBody.AddForce(rigidBody.velocity.normalized * speedUp, ForceMode2D.Impulse);

从我测试的结果来看,对不起,看来我不清楚我问的是什么,无论方向如何,我只是想要相同的速度。