今天打开项目,卡死在这个场景了,点其他任何场景 / 预制都没有用!!!
求救,这怎么干活。。!!!
通过顶部菜单,开发者选项,打开场景调试工具,看看是否有报错。把这个出问题的场景备份一下,发一份过来看看,然后删掉重启看看能不能进
那个场景确实有问题,我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 {
主要是单列的,而且有很多和节点声明周期无关的代码,所以目前我们项目里这种写法非常非常的多。
再比如,这种单例:
export class ABC {
private ddd = new DDD();
}const abc = new ABC();
export default abc;
然后这里调用了另外的DDD代码,另外的代码里有 game.addPersistRootNode(n); 等等操作!
就目前的机制来看,请不要在全局执行addPersistRootNode操作,因为这个节点会被加到场景中,保存的时候也会跟着保存到文件里,刷新脚本时就会添加相同节点。最好是只在运行时才使用这个方法,还是建议你把这个操作放到某个很早加载的组件的生命周期内。
如果想添加常驻节点,同时在编辑器下不想保存的话,可以使用 node.hideFlags |= CCObject.Flags.DontSave;