这是我的代码:
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
// This is a reference to the Rigidbody component called "rb"
public Rigidbody rb;
public float forwardForce = 4000f;
public float sidewaysForce = 100f;
// We marked this as "Fixed"Update because we
// are using it to mess with physics.
void FixedUpdate()
{
// Add a forward force
rb.AddForce(0, 0, forwardForce * Time.deltaTime);
if( Input.GetKey("d") )
{
rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
}
if( Input.GetKey("a") )
{
rb.AddForce(-sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
}
}
}
请帮助。
答案 0 :(得分:1)
让我们尝试一些事情。首先,尝试在FixedUpdate中取出Time.deltaTime。当在FixedUpdate中增加力量时,通常不需要使用Time.deltaTime。
第二,尝试创建零摩擦的物理材质,并将其附加到玩家对象的盒子碰撞器上。
答案 1 :(得分:1)
您将需要移动逻辑以将输入输入到FixedUpdate()
方法中。在此处,可以设置力的值,然后将此力添加到private float movement = 0f;
void Update()
{
if( Input.GetKey("d") )
{
movement = sidewaysForce;
}
else if ( Input.GetKey("a") )
{
movement = -sidewaysForce;
}
else
{
movement = 0f;
}
}
void FixedUpdate()
{
rb.AddForce(0, 0, forwardForce * Time.fixedDeltaTime);
rb.AddForce(movement * Time.fixedDeltaTime, 0, 0, ForceMode.VelocityChange);
}
中的RigidBody中。这样,我们将确保每帧都检测到获取输入的逻辑。
Time.deltaTime
由于您正在Time.fixedDeltaTime
中调用它,因此我也将FixedUpdate()
更新为{{1}}。
最后,在添加侧向力时,您可能需要使用不同的力模式进行测试。