Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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 - Fatal编程技术网

C# 无法使球同时跳跃和移动

C# 无法使球同时跳跃和移动,c#,unity3d,C#,Unity3d,我能在任何时间点跳跃或向左/向右移动。但不能同时跳跃和左右移动。我遗漏了什么吗?我的代码如下。谢谢你的建议 public int rotationSpeed = 100; public float jumpHeight = 8; private bool isFalling = false; void Update () { // handle ball rotation float rotation = Input.GetAxis("Horizontal") * rota

我能在任何时间点跳跃或向左/向右移动。但不能同时跳跃和左右移动。我遗漏了什么吗?我的代码如下。谢谢你的建议

public int rotationSpeed = 100;
public float jumpHeight = 8;

private bool isFalling = false;

void Update () {
    // handle ball rotation 
    float rotation = Input.GetAxis("Horizontal") * rotationSpeed;
    rotation *= Time.deltaTime;
    rigidbody.AddRelativeTorque(Vector3.back * rotation);  

    //check input
    if (Input.GetKeyDown(KeyCode.W)) 
    {
        rigidbody.velocity = new Vector3(0, jumpHeight, 0); 
    }
}
如文件所述:

在大多数情况下,不应直接修改速度 您应该使用

编辑:

我想澄清一下原因: “速度”是应用于对象的不同力的计算结果,您可以指定此值以强制不使用微积分,但您不应该这样做,因为将力与内置的AddForce相加会更加稳定和干净

简言之,若你们给速度赋值,那个么若你们使用AddForce,你们就绕过了之前所做的每一个微积分,正如名字所说的,你们在力和中添加了一个新的力

编辑2:

void Update () {
    // handle ball rotation 
    float rotation = Input.GetAxis("Horizontal") * rotationSpeed;
    rotation *= Time.deltaTime;
    rigidbody.AddRelativeTorque(Vector3.back * rotation);  

    //check input
    if (Input.GetKeyDown(KeyCode.W)) 
    {
        rigidbody.AddForce(new Vector3(0, jumpHeight, 0) * Time.deltaTime); 
    }
}

我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。我只想补充一点,使用
AddForce
,或一个变体,而不是直接设置速度,因为所有的物理计算都是正确的。但它只会直接跳起来的原因是,您正在将X和Z分量设置为0。如果您使用
rigidbody.velocity+=new Vector3(0,jumpHeight,0)
您将获得更接近您想要的行为。但是我要强调的是,这仍然不是正确的方法,你仍然需要做更多的工作才能让它像预期的那样工作;在这种情况下,球甚至不跳。如果球不跳,那是因为8的力比重力小,重力是-9.81,你必须施加一个更大的值来推动你的物体向上,因为重力是微积分中的一种力。想想牛顿的应用,它是重力的力,给出了问题。我把数字推到了500,现在反弹很好。我不明白的是,既然力是-9.81,10不应该足够让球跳一点吗?即使是100,它也几乎不会跳跃。我认为它在物理上应该足够了,但只有当它是一个连续的力时,你必须考虑到,你只在一帧上加上10的力,所以它只在很短的时间内,没有足够的力量抵抗惯性,你需要长时间使用这个力,才能真正感觉到它的作用,或者将它设置为一个非常高的值