求助协程问题
unity3d吧
全部回复
仅看楼主
level 9
使用协程改变某脚本里的属性,跑起来才发现,当这个脚本绑定的游戏物体被隐藏后,协程丢失了这个对象,也获取不到这个游戏物体。虽然不影响游戏的运行,但是有一个红色的报错。
协程一般是用事件中心管理的吗?异步操作搞得我头大。
2023年09月28日 04点09分 1
level 8
不都是自己管理的么
2023年09月28日 04点09分 2
有没有规范的管理策略啥的,比如协程池,物体隐藏时,自动停止该物体所有的协程,或者使用事件中心监听,隐藏时触发监听?
2023年09月28日 06点09分
@『不夜星』 不用协程 自己写计时器啊 不仅更灵活 性能也更好
2023年09月28日 06点09分
@珍可爱的噶哦😾 还是有点区别,不用协程或者线程的话自己计时器到底还是同步的,我需要异步的操作。
2023年09月28日 06点09分
@『不夜星』 需要异步的地方一般unity都给你提供了 小东西和正常执行的线性逻辑不需要异步
2023年09月28日 06点09分
level 6
协程是mono脚本管的,在哪个mono脚本开启的协程,归哪个脚本管。
2023年09月28日 05点09分 3
我知道归mono管,想问下管理的策略,我把游戏物体很多的行为代码写成协程,放在公共类里,游戏物体隐藏的时候,协程还在运行,但是找不到这个物体就报错了,也没法判空。就想知道这种情况该怎么管理协程。
2023年09月28日 06点09分
level 9
对了,这个协程是由一个公共类启动的,所以游戏物体隐藏时,这个协程还在启动,就是找不到这个物体了。这时候也没办法判断这个物体的active的状态,因为你用物体.activeself判断时就会报错,说找不到这个物体,判空又不为空,就无可奈何。。
2023年09月28日 06点09分 4
level 9
我好像明白了获取不到游戏物体的原因了,感觉是因为我没有用变量储存这个游戏物体的地址,只是通过传参的方式,将这个物体上的脚本交给协程启动了,协程里无法通过这个参数访问物体的地址,所以是形参和实参的问题?
麻了,好乱[喝酒]
2023年09月28日 07点09分 5
level 5
一个物体被隐藏了,它身上的代码就无法执行了,但依然可以判断它的activeself状态,不会出现什么丢失对象之类的问题。遇到任何丢失对象之类的问题,一般的解决办法是在出问题的代码之前下个断点,然后倒查是哪个变量为null、从什么时候就开始为null的。
2023年09月28日 10点09分 6
仔细看了下有2种报错,一种是物体被删除,所以协程找不到这个物体,另一种是物体被隐藏,协程无法启动,之前用.activeself判断报另一种错让我误以为无法判断。理清思路后,添加判断条件不会报错了。[喷]
2023年09月28日 14点09分
level 12
异步操作可以考虑用unitask
2023年09月28日 11点09分 7
level 3
上async
2023年09月28日 12点09分 8
1