每当我测试这段代码时,它都会冻结统一,但我不明白为什么

问题描述 投票:0回答:1

我试图找出为什么这个特定的代码片段似乎会导致 Unity 完全冻结,以至于我必须完全重新启动 Unity。我正在使用 System、System.Collections、System.Collections.Generic 和 UnityEngine(如果有帮助的话)。我真的无法弄清楚这里的问题。


        while (Input.GetButton("Fire1"))
        {
            Instantiate(projectilePrefab, transform.position, projectilePrefab.transform.rotation);
            System.Threading.Thread.Sleep(fireRate);
        }

这似乎是有问题的代码,如果我在没有此代码的情况下运行它,它可以正常工作。它应该制造一个新的射弹,等待一小段时间,然后只要我按住按钮就重复,但统一只是冻结并且什么也不做。

c# unity-game-engine
1个回答
0
投票

删除线程。睡眠。 Unity 中的大部分内容都是在主线程上运行的。您在主线程上调用 sleep 不是这样做的方法。更不用说您可以通过在 while 条件下使用火率来模拟睡眠。

最后,研究一下对象池。你在更新时(假设)按下鼠标左键几帧,对实例化进行了如此多的垃圾邮件,这必然会导致一个大的峰值。实例化是一条缓慢的路径,这就是为什么我们倾向于使用对象池并尽早付出代价并预先分配可以重用的实例。

© www.soinside.com 2019 - 2024. All rights reserved.