Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使附加力缓慢减速_C#_Unity3d_Unity5 - Fatal编程技术网

C# 如何使附加力缓慢减速

C# 如何使附加力缓慢减速,c#,unity3d,unity5,C#,Unity3d,Unity5,我有一个2d刚体需要滑动到一个停止点。为了移动,我以我喜欢的速度向刚体添加一个力,称为加速,我不知道如何使它滑动到停止。当我放开W键时,我尝试添加一个相反的力,但它立即停止。我需要找到一种方法使“飞船”在0.5秒后减速到停止。我发现有人问这个问题,但没有一个答案对我和我的特定代码有效。添加拖动也不起作用,因为我希望能够向其他方向移动 GameObject ship; public Vector2 speedUp; public Rigidbody2D shipRig; // Use this

我有一个2d刚体需要滑动到一个停止点。为了移动,我以我喜欢的速度向刚体添加一个力,称为加速,我不知道如何使它滑动到停止。当我放开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)) {
    }
游戏对象飞船;
公共矢量2加速;
公共Rigidbody2D船舶钻机;
//用于初始化
无效开始(){
ship=GameObject.FindGameObjectWithTag(“ship”);
shipRig=ship.GetComponent();
}
//每帧调用一次更新
无效更新(){
if(Input.GetKeyDown(KeyCode.W)){
Shiplig.drag=0;
船舶钻机.附加力(加速);
}
if(Input.GetKeyUp(KeyCode.W)){
}
谢谢大家

编辑

我把它修好了!!!谢谢大家的建议,我所做的只是把它从“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);
    }

}
游戏对象飞船;
公共矢量2加速;
公共矢量2减速;
公共向量2左;
公共矢量2特快专递;
公共Rigidbody2D船舶钻机;
公共矢量2速度1;
//用于初始化
无效开始(){
ship=GameObject.FindGameObjectWithTag(“ship”);
shipRig=ship.GetComponent();
}
//每帧调用一次更新
无效固定更新(){
if(Input.GetKey(KeyCode.W)){
船舶钻机.附加力(加速);
}
if(Input.GetKey(KeyCode.S)){
船舶钻机.附加力(减速);
}
if(Input.GetKey(KeyCode.A)){
Shiplig.AddForce(左速度);
}
if(Input.GetKey(KeyCode.D)){
希普瑞格·阿德福斯(speedRight);
}
}

当你在使用物理时,你只需要根据玩家的输入施加足够的力,使飞船按照你的意愿移动。你可以先设置阻力并保持这种方式,但要使输入力更大,这样你就可以覆盖阻力

如果你这样做,阻力将始终存在,如果没有力作用于某个物体上,它自然会减慢速度。如果玩家按下W,我们会施加足够大的力来克服阻力并推动船前进;当他们释放W时,唯一的“力”作用将是阻力,它会减慢速度

这是Serlite使用相反力量评论的另一种方法

牛顿第一运动定律:

在惯性参考系中,物体要么保持静止,要么 继续以恒定速度移动,除非受到 力量

在您的情况下,唯一的力是由输入施加的。您需要一个以
AddForce
形式存在的主动反作用力,或者以摩擦或阻力形式存在的阻力


如果你想让飞船在0.5秒内停下来,你需要计算玩家释放按钮时飞船的阻力和速度,但是如果你接受“关闭”的话到0.5秒,你就可以到达那里,这将是一个反复试验。

首先,所有的物理计算必须在
FixedUpdate()
中,而不是
更新()
函数,由于其本身的性质,更新函数在可变时间后发生,每秒可能发生30到200次以上。这使得它在平衡速度、力和其他物理计算时极不可靠


要让它减速,你可以增加一些阻力或施加一个相反的力,就像《燃烧的僵尸》中已经提到的那样。

将阻力设置为0以外的值不起作用吗@ḞḹáḿíṅḡⱫỏḿƀíé我试着在放开钥匙后将阻力设置为1,但我也希望船朝其他方向移动。如果我想朝其他方向移动船,阻力会产生干扰。使用相反的力是最简单的操作方法。这是一个典型的力学问题,确定停止物体需要多少减速呃一段固定的时间(因此在这段时间内应该施加多少力).你在上学之前有没有上过物理课?你有没有试过给飞船一个旅行/移动矢量3?如果你总是在更新循环中将旅行/移动矢量应用到飞船上,但是当你想前进而不是将加速比添加到飞船上时,你会将它添加到旅行/移动矢量3中。@Serlite我尝试过添加一个相反的力,但它会立即停止,我想让它滑行到停止。不,我还没有上物理课。正如一方所想,op也可以在更新循环中做一个检查,看看是否有按键被按下,如果是op,它就不能给飞船增加阻力。这对我来说似乎是不必要的一步。为什么不把它设为默认值呢“然后离开它?”AnselFaillace我这样做了,但当我将来添加它们时,它会干扰其他方向@ḞḹáḿíṅḡⱫỏḿƀíé你是对的,这在很大程度上是不必要的。我之所以说这是一个可能的选择,是因为有些人只想看到他们目前正在影响它的东西,而不是影响它的所有东西。@racorse它是如何干扰你的其他方向的?谢谢你的提示!不用担心,记住它就好了未来。它为你省去了很多麻烦