【问题标题】:Gravity not working in unity RigidBody 2D transform重力在统一 RigidBody 2D 变换中不起作用
【发布时间】:2014-04-26 19:39:04
【问题描述】:

我制作了精灵并应用了刚体 2d 组件,它工作正常,现在我编写了这段代码,但是当我开始玩游戏时它工作了一段时间,但在那之后,重力似乎为空,意味着当我离开按键时我的刚体不会下降

// Update is called once per frame void Update () { if (Input.GetKey (KeyCode.LeftArrow)) { posX--; } else if (Input.GetKey (KeyCode.RightArrow)) { posX++; } if (Input.GetKey (KeyCode.UpArrow)) { posY++;
} else if (Input.GetKey (KeyCode.DownArrow)) { posY--; } angle -= Input.GetAxis ("Horizontal"); angle = Mathf.Clamp (angle, -10, 10); } void FixedUpdate() { transform.eulerAngles = new Vector3 (0,0,angle); transform.position = new Vector2 (posX * Time.deltaTime, posY * Time.deltaTime); } }
我想做的是上下左右移动直升机(用户可以控制)但是当用户不交互时,我希望重力默认工作,直升机会因重力而下降,如何实现?

【问题讨论】:

    标签: c# unity3d rigid-bodies


    【解决方案1】:

    您正在覆盖每一帧的位置,因此它不会测量 Unity 在其物理上计算的内容,当您这样做时您会覆盖:

    transform.position = new Vector2 (posX * Time.deltaTime, posY * Time.deltaTime);
    

    我不知道你想要实现什么,但如果在此之后你使用物体的质量和重力加速度常数重新使用traforme.AddForce() 施加重力,也许它会起作用。

    【讨论】:

    • 查看改进版并告诉我如何实现它:)
    • 我已经告诉过你,你正在覆盖这个位置,重力会作用在这个位置上,但是当你给它赋值时你会重置它。您可以在设置位置后通过施加力来模拟重力,或者干脆不设置位置 - 您可以向上施加力。
    【解决方案2】:

    您应该使用 AddForce 而不是更改 x 和 Y 轴。 您可以在此处查看示例,

    AddFource Example

    【讨论】:

      猜你喜欢
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      相关资源
      最近更新 更多