Unity 当我们已经在图形重建循环中时,尝试为图形重建添加图像。不支持

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

我正在使用 Unity 开发一款游戏,但最近我遇到了这个无法解释的错误,当我尝试编辑 GO 子组件时弹出该错误..

item.transform.GetChild(0).GetComponent<SVGImage>().sprite = script.GetFlipperPreviewSpriteById(myFlippers[i].Id); 
item.transform.GetChild(1).GetComponent<Text>().text =  myFlippers[i].Id+" flipper";

我收到这个错误信息..

2022.05.03 21:52:48.749 22693 27192 Error Unity Trying to add IMG_imageItem (Unity.VectorGraphics.SVGImage) for graphic rebuild while we are already inside a graphic rebuild loop. This is not supported.

我在我的项目中实施 Firebase 后开始出现此错误,我无法继续前进。我找不到任何文章谈论这个所以我希望我至少能得到一些答案:)提前致谢!

Unity版本2019.4.36f1

c# unity-game-engine runtime-error game-development gameobject
2个回答
2
投票

经过 5 页的谷歌和一点点运气,我发现这篇文章正是在谈论我的问题,基本上你只能在主线程上更新 UI,所以当你使用诸如 firebase 之类的异步函数时,你需要制作编辑你的函数在主线程上运行的 UI

SetActive()只能从主线程调用


0
投票

在我的理解中,Unity在处理图形重建时(在Update()和StartCoroutine之后),你是不允许修改UI元素的(比如调用

SetActive()
)。

所以你应该过一段时间再做这些操作。你可以使用

StartCoroutine
,它保证在图形重建之前的下一帧运行你的代码。但是你必须在 yield 关键字之后编写代码(因为 yield 关键字之前的代码将在这一帧立即运行,与图形重建)。

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