unity3d 为什么C#的“while”函数会导致游戏引擎崩溃?[已关闭]

fgw7neuy  于 2022-11-16  发布在  C#
关注(0)|答案(2)|浏览(181)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。

这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
25天前关闭。
Improve this question
我正在做一个Unity引擎的游戏。对于移动,我使用了vector2。但是对于vector2,你需要垃圾邮件的按钮,以便球员移动。所以我尝试“while”函数来循环这个过程。下面是主要代码

if (Input.GetKeyDown(KeyCode.W))
    {
        i = 5;

    }

    //test

    if (Input.GetKeyUp(KeyCode.W))
    {
        i = 1;
    }

    
   

    while(i !=1)
    {
        rb.AddForce(Vector2.up * JumpForce);
    }

然而,当我运行它的时候引擎崩溃了。为什么?只是让你知道,没有编译器错误。

6mzjoqzu

6mzjoqzu1#

在Unity中,物理运动应该在FixedUpdate中完成,输入检查在Update中完成。

[SerializeField] private Rigidbody _rb;
[SerializeField] private float _jumpForce;

private bool _addForce;

private void Update()
{
    _addForce = Input.GetKey(KeyCode.W);
}

private void FixedUpdate()
{
    if (_addForce) _rb.AddForce(Vector2.up * _jumpForce);
}

如果你在Update中添加了一个while,它将卡在那个帧中,冻结主循环,引擎不能轮询新的输入,所以你的Update不能继续。

htrmnn0y

htrmnn0y2#

重复的addforce可能对PC来说有点多。
请执行以下操作:

if (Input.GetKey(KeyCode.W))
{
    rb.AddForce(Vector2.up * JumpForce);
}

这样,它只在按住键时移动。

相关问题