Unity,如何使摩擦力随着运动起作用?

4

我有一个简单平台和一个代表玩家的立方体,构成了一个三维世界。当我旋转平台时,由于物理材料中摩擦力的增加和减少,立方体会滑动并表现得像您所期望的那样。

我希望当输入(例如向前)结束后,立方体仍然继续滑动。但事实并非如此。我尝试使用 rigidbody.position 更新位置并进行更新。我很快就明白它不会与物理引擎协同工作。

现在我有以下代码。但它仍无法按照期望的那样工作。我希望能得到一些指针来解决这个问题。

    public class Player1 : MonoBehaviour
    {
     private float speed = 10f;
     private Vector3 direction;
     private Vector3 velocity;
     private float vertical;
     private float horizontal;


     Rigidbody playerRigidBody;

     // Start is called before the first frame update
     void Start()
     {
        playerRigidBody = GetComponent<Rigidbody>();
     }

     // Update is called once per frame
     void Update()
     {
        vertical = Input.GetAxisRaw("Vertical");
        horizontal = Input.GetAxisRaw("Horizontal");
        direction = new Vector3(horizontal, 0, vertical);  
     }

     private void FixedUpdate()
     {
        velocity = direction.normalized * speed * Time.fixedDeltaTime;
        playerRigidBody.MovePosition(transform.position + velocity);
     }
    } 

1
不要移动它,用力推动它。 - BugFinder
当我使用position或MovePosition时,它不使用物理引擎吗? - Joakim
正确。实质上你进行了传送。 - BugFinder
1个回答

1
使用playerRigidBody.AddForce(Vector3 direction, ForceMode forceMode)来移动你的玩家。
如果你不想让你的玩家以疯狂的速度移动,可以使用playerRigidBody.velocity = Vector3.Clamp(Vector3 vec3, float minValue, float maxValue); 然后尝试不同的变量以获得你想要的结果!

什么是维度速度? - Joakim
如果你在Update方法中使用AddForce,它会在每一帧向玩家添加力量,请尝试一下!^^ - miishuriinu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接