我有一个需要滑行停止的2d刚体。为了移动,我以我喜欢的速度向刚体添加一个力,称为speedUp
,我不知道如何使它滑行停止。当我放开W键时,我尝试添加相反的力,但它立即停止了。我需要找到一种方法让“船”在0.5秒后减速停止。我发现其他人都在问这个问题,但没有一个答案对我和我的具体代码有用。添加拖动也不起作用,因为我希望能够向其他方向移动。
GameObject ship;
public Vector2 speedUp;
public Rigidbody2D shipRig;
// Use this for initialization
void Start () {
ship = GameObject.FindGameObjectWithTag ("ship");
shipRig = ship.GetComponent<Rigidbody2D> ();
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.W)) {
shipRig.drag = 0;
shipRig.AddForce(speedUp);
}
if (Input.GetKeyUp (KeyCode.W)) {
}
感谢大家!
EDIT!
我修好了!!!谢谢你们所有人的建议,我所做的就是将它从“GetKeyDown”更改为“GetKey”并且它有效!我把拖动到2,速度是40px。
GameObject ship;
public Vector2 speedUp;
public Vector2 speedDown;
public Vector2 speedLeft;
public Vector2 speedRight;
public Rigidbody2D shipRig;
public Vector2 speed1;
// Use this for initialization
void Start () {
ship = GameObject.FindGameObjectWithTag ("ship");
shipRig = ship.GetComponent<Rigidbody2D> ();
}
// Update is called once per frame
void FixedUpdate () {
if (Input.GetKey (KeyCode.W)) {
shipRig.AddForce(speedUp);
}
if (Input.GetKey (KeyCode.S)) {
shipRig.AddForce(speedDown);
}
if (Input.GetKey (KeyCode.A)) {
shipRig.AddForce(speedLeft);
}
if (Input.GetKey (KeyCode.D)) {
shipRig.AddForce(speedRight);
}
}
答案 0 :(得分:2)
当您使用物理时,您只需根据玩家输入施加足够的力量,以使船舶随意移动。您可以将拖动设置为开始并保持这种方式,但要使输入力更大,以便您可以覆盖拖动。
如果你这样做,拖动将永远在那里,如果没有力作用于它,自然会减慢某些东西。如果玩家按下W,我们会施加足够大的力来克服阻力并向前推进船只;当他们释放W时,唯一的&#34;力量&#34;行动将是拖累,这将减慢它。
这是对Serlite使用反对力量的评论的替代方法。
牛顿的第一运动定律:在惯性参考系中,物体要么保持静止,要么保持静止 继续以恒定的速度移动,除非采取行动 力。
在您的情况下,输入应用的唯一力量。你要么需要AddForce
形式的主动反力,要么以摩擦或阻力的形式阻力。
如果你希望船只在0.5秒内停止减速,你将需要计算当玩家释放按钮时船只有多少阻力与你有多大的速度但你是否会接受某些东西&#34;关闭& #34;到0.5秒你可以到达那里会有一些试验和错误。
答案 1 :(得分:0)
首先,所有物理计算必须在doc.Save(Globals.pathNotifFile);
而不是FixedUpdate ()
函数内部,因为它本身的性质,Update函数在可变时间之后发生,并且可能发生在30到超过每秒200次。这在平衡速度,力和其他物理计算时非常不可靠。
要让它减速,你可以添加一些阻力或施加相反的力量,如Flaming Zombie已经提到的那样。
答案 2 :(得分:0)
我刚想出了这个想法,我不确定它是否会运作良好,但内插速度怎么样? 用(0.5-(elapsed_time))/ 0.5 *(original_velocity)设定速度,而(elapsed_time)<0.5f? 对不起,这是我第一次使用堆栈溢出而我现在没有电脑......