Unity SetActive(True)使用遇到问题:使用SetActive(True)实现panel的显示与隐藏时,滞后很严重。
想实现的功能是:添加一个panel,选择一个文件后,在对该文件进行处理时,显示panel,已告知用户正在处理。处理完毕后,点击屏幕,隐藏panel。
但结果是当处理完成之后,才会显示panel,而且点击屏幕,panel也不会隐藏。


Loadlevel调用了SetActive, ProcessButton.RunCmd()则是对文件的处理函数,在处理之前显示panel,处理完成后隐藏panel。

调试界面,这里已经显示执行过这条语句了,但是unity中却并没有显示

反而是都执行过才显示

这时候点屏幕也没有用了。
求各位指点一下!
https://blog.csdn.net/zhendelanQAQ/article/details/130332247#comments_26197560
不知道你这个问题是否已经解决, 如果还没有解决的话:
- 以下回答来自chatgpt: 回答: 该问题可能与Unity的UI渲染机制有关。Unity的UI系统是在每一帧更新之后进行渲染,因此如果panel的显示或隐藏是在Update()函数中执行的,那么可能会出现严重的滞后问题。 要解决该问题,可以使用以下方法: 1. 使用coroutine来延迟SetActive(True)的执行。在点击处理文件按钮时,设置一个coroutine来进行渲染等待,然后再执行SetActive(True)。例如: IEnumerator ShowPanel() { yield return new WaitForEndOfFrame(); panel.SetActive(true); } 2. 使用UI.Toggle组件来代替SetActive(True)和SetActive(False),这样可以使用UI.Toggle组件的isOn属性来控制panel的显示和隐藏。例如: public Toggle toggle; public void TogglePanel() { if (toggle.isOn) { panel.SetActive(true); } else { panel.SetActive(false); } } 3. 如果使用Loadlevel或ProcessButton.RunCmd()函数时仍然存在滞后问题,则可以将UI相关的操作放入Unity的UI线程中。这可以通过调用UnityMainThreadDispatcher.Instance().Enqueue()函数来实现。例如: public void ShowPanel() { UnityMainThreadDispatcher.Instance().Enqueue(() => { panel.SetActive(true); }); } 注意:要实现上述方法,需要将UnityMainThreadDispatcher.cs脚本添加到项目中,并将其作为单例使用。该脚本可以在以下链接中找到: https://github.com/PimDeWitte/UnityMainThreadDispatcher/blob/master/Assets/UnityMainThreadDispatcher.cs 以上是我能为您提供的解决方案,希望对您有所帮助。如果仍然存在滞后问题,可能需要进一步检查代码和系统资源的使用情况。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^