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的力,所以它只在很短的时间内,没有足够的力量抵抗惯性,你需要长时间使用这个力,才能真正感觉到它的作用,或者将它设置为一个非常高的值