只是开始演奏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,速度)对吗?所以无论球的方向如何,我都希望以相同的方式增加它。
我不知道我是否很清楚,我读过一个线程上的标准化向量,但是我不明白,这就是为什么我要问你的帮助人员,在此先谢谢你!
答案 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);
从我测试的结果来看,对不起,看来我不清楚我问的是什么,无论方向如何,我只是想要相同的速度。