细心的你一定发现了,你这个对象勾选了静态,就算能找到但是也不能操作对象啦
更细心的你一定还发现了一个细节,场景上不是有3个正方体么,正常来说渲染合批的时候,用对象管理器里的guid应该找不到的丫
没错,确实如你所说,真相是这样的,这三个正方体它们的材质都是不一样的,因此它们仍然能被原guid找到哦
知识点来了:find能找到没有进行渲染合批的静态对象,但是不能操作它们
静态对象的渲染合批与材质有关,当有多个相同材质的对象时,如果被设置为静态对象,那么它们将被合并,使用find和原guid查找将失败
案例3:操作一个对象不存在的对象
尝试去获得一个guid为【6666】的对象,但是场景里并没有它
想要操作一个不存在的对象,打印它的name时,就会报下边的截图里的错误
这是一种特别常见的问题,如果遇到了TypeError: Cannot read property "xxxx" of undefined
那么可以优先猜测是否这个对象是不是为空了,我们操作了一个错误的对象
代码报错如何查找
代码报错分为编译报错和运行报错
1.编译报错:编辑器里自动编译的处会有对应编译失败提示
并且能在\MetaWorldSaved\Saved\Logs路径下,可以在MW.log中通过【MWTSCompileFailed】搜索到相关信息
- 解决方法:编译失败窗口里和MW.log文件里可以直接定位到哪个脚本的哪行代码出问题,修改对应错误即可
2.运行报错:MetaWorldSaved\Saved\MetaWorld\MWLogs路径下有相关的Client.log和Server.log文件
可以在相关日志中通过【TypeError】搜索到相关信息:
1. 前跟JS Execution Exception这种情况
2. 以及前跟Error的这种情况
找到项目目录下的dist文件夹,用编辑工具打开game.js文件,我们找到第1种情况TypeError中提示的第58行
其对应的是NewScript.ts代码中对应的代码,分析发现(通过打日志,下断点等方式分析问题),原因是go对象没有被找到,场景里可能根本没有一个guid为555的对象(亦或者我们应该通过异步查找asyncFind),最终运行时操作一个undefined的对象就报错误了