通过顶部菜单,开发者选项,打开场景调试工具,看看是否有报错。把这个出问题的场景备份一下,发一份过来看看,然后删掉重启看看能不能进
那个场景确实有问题,我command+s保存了一下 Test2Scene,我看到上面有2个相同的 GameSocket 结点,上面都挂了一个脚本组建,我删了脚本组建,就果然能打开其他 场景 和 Prefab 了。
然后我发现这2个 TestScene 和 Test2Scene一摸一样,而且那2个 GameSocket 节点都删不掉,我就把2个 TestScene 和 Test2Scene 文件都给删掉了。现在看上去貌似恢复正常了。
好了,能恢复就好了!我也不去恢复刚刚删掉的那2个场景文件了!感谢。
卧槽,怎么回事。2个cocos 项目文件怎么交叉再一块了??

我确定下面的文件夹,是另一个工程里的资源
新版本刚发布就敢用,腻害,,一般不都是等发布2个大版本以上才稳定的么
没办法,我们尝试了3.3 / 3.4 都有各种各样的问题,比如3D粒子、模型等一些功能都不好用,3.5 在 3D粒子方面还是比较完善一点的,但是其他问题也比较多。
选中场景,右键,在资源管理器中显示,看看目录在哪里
不对啊。现在关闭编辑器,再每次打开,都会这样:
你换个场景看还会不会有这个问题,这个提示应该是你场景里有异常才出现的
我昨晚就已经清除了,后面根据那个异常的节点,我好像找到原因了:
在一个单列的代码里,因为有一个全局的 new () 这个单列,通过代码添加的这个「常驻节点」会导致 Creator编辑器 产生各种卡死的问题。
现在即使没有在浏览器中运行,编辑器也会自动执行脚本吗?干嘛这么做啊?很容易产生诡异的问题!
需要加装饰器才会在编辑器里执行的
不是一定不会执行啊大哥。。。
需要加装饰器才会行执行,不是一定不会执行!!
????好吧,还是不懂


我不去纠结装饰器了,这个bug本身不是装饰器的问题。
我就姑且理解成: ccclass 标识的类,会在装饰器函数里 new 出来。
这个bug本身是:
那个「常驻节点」会导致编辑器卡死!
- 我知道为啥了,你的代码是加在组件外部的,所以被编辑器加载了。建议还是不要这样写,最好是在脚本生命周期里做这些事情。
// 写在组件外部会被加载,最好写在脚本生命周期方法里
const n = new Node('test');
game.addPersistRootNode(n);
@ccclass('NewComponent')
export class NewComponent extends Component {
- 你截图的报错,我们在处理了。但是我这边报错不会导致场景卡死,请看看你添加的常驻节点身上的组件是不是有问题哈~
- 对,是在 class 外面的,我上面也说了:
主要是单列的,而且有很多和节点声明周期无关的代码,所以目前我们项目里这种写法非常非常的多。
再比如,这种单例:
export class ABC {
private ddd = new DDD();
}const abc = new ABC();
export default abc;
然后这里调用了另外的DDD代码,另外的代码里有 game.addPersistRootNode(n); 等等操作!
- 那个常驻节点,正如你上面代码一样,这边是 const node = new Node("");node.addCompoenet(GGG);这样出来的,然后game.addPersistRootNode(n);,每次重启编辑器,场景上莫名增加2个节点GGG,从而导致的编辑器卡死。
就目前的机制来看,请不要在全局执行addPersistRootNode操作,因为这个节点会被加到场景中,保存的时候也会跟着保存到文件里,刷新脚本时就会添加相同节点。最好是只在运行时才使用这个方法,还是建议你把这个操作放到某个很早加载的组件的生命周期内。
如果想添加常驻节点,同时在编辑器下不想保存的话,可以使用 node.hideFlags |= CCObject.Flags.DontSave;
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。



