记一个在unity中使用多线程修改ui导致的问题

起因是遇到了一个很奇怪的问题,在图一的代码打印结果debug.log(3)没有生效,但所有的绑定我都确认过一遍没有遗漏,于是一路加debug,发现name不为空且name.text是可以打印出来的,唯独name打印不了也无法修改name.texrt,最坑的是什么报错都没有,完全不理解什么地方出了问题。
直到把问题发在ggj群里,虽然还是没解决,但有人提了一句这个功能好像没必要用多线程,突然想到android中是禁止非主线程修改ui的,会不会unity中也是这样呢?将name.changename(1)移到了debug.log(1)下面,竟然真的成功了!

后来问了下gpt,这是他的回答:

“Unity禁止在非主线程中修改UI。在这个例子中,你使用了Task.Run来异步执行ConfirmBtn_onclickAsync方法,这个方法中包含了对UI元素的操作,在确认按钮被点击时,它会改变Name和Content的值并更新UI。由于Task.Run会在另一个线程中执行ConfirmBtn_onclickAsync方法,而名为ChangeName()和SetContent()的函数都试图修改UI元素的状态,所以会导致程序异常。

为了解决这个问题,你可以通过使用Unity提供的Coroutines来替代使用Task.Run。Coroutines在Unity中用于处理异步任务,并确保它们始终在主线程上运行,因此可以安全地修改UI元素。”

然而最坑的是这段出错的代码本来就是我把需求扔给GPT让它生成的……emmm看来还是不够智能啊……

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值