【问题标题】:Rigidbody Velocity Messing Up Physics UNITY刚体速度扰乱物理 UNITY
【发布时间】:2015-10-04 22:29:37
【问题描述】:

我正在尝试使用rigidbody.velocity 来移动我的播放器:

rigidbod.velocity = new Vector2 (Input.GetAxis ("Horizontal") * maxSpeed, rigidbod.velocity.y);

问题是,这弄乱了我的爆炸代码。角色应该在接近爆炸时被击退。我知道为什么会这样;如果玩家静止不动,刚体的 X 速度将返回为 0,这意味着沿 X 轴推动玩家的任何外力都会抵消这一点。所以当我添加爆炸时,玩家会切到几个单位外的新位置。它看起来非常不自然和生涩,因为他应该被推回去,但他的代码告诉他要静止,除非按下一个键。我发布这篇文章是为了看看是否有任何方法可以重新编写此代码,以便能够在被外力正确推动的同时移动玩家。我听说 AddForce 可以,但是当我使用它时,我的播放器的速度不断增加。他枯萎太快或太慢。关于如何让它发挥作用的任何想法?我尝试在它说“maxspeed”之后添加rigidbody.velocity.x,希望它允许外力输入,并且它可以工作,但它会弄乱运动代码,让他走得太快。我似乎无法同时让爆炸和运动代码正常工作。任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: unity3d physics velocity


    【解决方案1】:

    这正是他们在 Unity 文档中明确声明的原因:

    在大多数情况下,您不应该直接修改速度,因为这样可以 导致不切实际的行为。

    您应该使用AddForce(..),而不是直接修改速度

    Vector2 force = new Vector2 (Input.GetAxis ("Horizontal") * maxSpeed, 0f);
    rigidbody.AddForce(force);
    
    //or if in update:
    rigidbody.AddForce(force * Time.deltaTime);
    

    【讨论】:

    • 我不确定你是否明白我在说什么。我在我写的东西中承认了这一点。 AddForce 的问题是我的播放器的速度会不断增加。玩家没有达到最大速度。因此,如果持有一个方向,玩家会很快发疯。我在我写的东西里说过。我非常感谢您尝试提供帮助,但这并不是我真正想要的。不管怎么说,还是要谢谢你! @LOLslowSTir
    • 您可以在条件下使用速度。 if(velocity.x < maxSpeed) AddForce(force * Time.deltaTime)。太快不会加力,但不会造成爆炸。
    • 如果他想要这样,他可以直接操作velocity,但必须考虑当前的velocity.x,如:rigidbody.velocity = new Vector2 (Mathf.Clamp(rigidbody.velocity.x + (Input.GetAxis ("Horizontal") * maxSpeed), 0f, terminalSpeed), rigidbody.velocity.y);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多