首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rigidbody2D.MovePosition导致物理上的滞后,例如重力

Rigidbody2D.MovePosition导致物理上的滞后,例如重力
EN

Stack Overflow用户
提问于 2021-05-21 14:08:53
回答 2查看 410关注 0票数 0

我测试过了这个剧本导致了生理上的滞后。在我看来,它不是每0,2秒钟就叫物理,而是更少,因为这个物体下降得更慢。

这里有一个gif来演示发生了什么:紫色的没有脚本,蓝色的有脚本。

那我该怎么解决呢?

代码语言:javascript
复制
public class PlayerMovement : MonoBehaviour
{
    Rigidbody2D rb;
    Vector2 movement = new Vector2(0, 0);

    public float movementSpeed = 10f;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }
    private void Update()
    {
        movement = new Vector2(Input.GetAxisRaw("Horizontal"), 0);
    }

    void FixedUpdate()
    {
        rb.MovePosition(rb.position + movement * movementSpeed * Time.fixedDeltaTime);
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-21 15:22:03

正如所说,MovePosition推翻了运动,=>不使用它,如果你想要基于物理(力)的运动和对碰撞的反应等。

您希望只对水平运动使用输入,而对垂直运动使用物理。MovePosition影响两个方向。

尝试直接设置Rigidbody.velocity

代码语言:javascript
复制
private void Update()
{
    // Get the current velocity
    var velocity = rb.velocity;

    // Only overwrite the x velocity
    // since the velocity is only applied in the FixedUpdate anyway
    // there is no problem setting this already in Update
    // And since it is the velocity which is already frame-rate independent
    // there is no need for Time.deltaTime
    velocity.x = Input.GetAxisRaw("Horizontal") * movementSpeed;

    // Assign back the changed velocity
    rb.velocity = velocity;
}
票数 0
EN

Stack Overflow用户

发布于 2021-05-21 14:35:45

如果我理解您想要做的事情,那么您的代码的逻辑就有问题了。

您似乎是以垂直的方式移动,但是从水平输入中只具有vector2的x组件。

代码语言:javascript
复制
new Vector2(Input.GetAxisRaw("Horizontal"), 0);

如果您所附加的GIF,对象是自由落体,因此这将是一个垂直下降,或y组件的vector2,您正在设置为0。将其想象为(x,y)或(水平移动(左/右),垂直移动(向上/向下))。

我将把上面的一行改为:

代码语言:javascript
复制
movement = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));

现在可以使用垂直输入垂直移动。在MovePosition文档中提到的不会引起问题的其他事情是将您的Rigidbody2D标记为Interpolate。它是Rigidbody2D组件中标记为Interpolate的底部字段,将其从None设置为Interpolate

对象在没有任何输入的情况下缓慢移动的原因是,在Rigidbody上仍然将Rigidbody设置为1而不是0。如果您试图使用此脚本模拟重力,请将垂直组件添加到输入向量中,并将Rigidbody上的Rigidbody字段设置为0。MovePosition正在对抗当前的重力,试图影响它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67638510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档