玩家不在Unity中移动

时间:2019-12-08 11:46:48

标签: c# visual-studio unity3d

这是我的代码:

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);
        }
    }
}

Unity - Player not moving

请帮助。

2 个答案:

答案 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}}。

最后,在添加侧向力时,您可能需要使用不同的力模式进行测试。