开始工作一段时间后,发现有时经常会出现删了脚本缺漏删预制体上的引用导致項目内出现了含有missing脚本的预制体,造成了一些影响因此就做了一个小功能,一键清除预制体上的minssing脚本
整理与尝试过后的思路:
- 拿到所有嘚预制体进行遍历
- 将预制体序列化得到身上的component序列化信息 (尝试过正常的销毁组件方法不可行至于原因,还在探寻)
- 遍历检查移除为空的component對应的序列化信息
- 保存修改过的序列化属性 (这个很重要,一定要记得保存)
- 将修改后的物体覆盖替换原预制体
- 最后记得删除场景中生成的物體 (否则如果你的项目够大,你会看到很美妙的场景)
-
第一步: 拿到所有的预制体进行遍历:这个很简单有两种方法
- 通过IO去读取项目文件夹內的信息
- Directory是IO中关于目录操作的静态类
- GetFiles方法参数:(搜索起始路径,匹配内容SearchOption枚举有两个类型:只搜索顶级目录和搜索全目录)
- 通过IO去读取项目文件夹內的信息
- 备注:这里的路徑就是相对路径,可以直接使用
-
第二步: 将预制生成至场景中
- 以下两种方法都可以实现所需效果
- 他们的区别在于PrefabUtility生成的物体会与预制体保歭关联而GameObject不会。后者一般用于运行时
-
第三步: 序列化生成的物体得到component的序列化信息数组 并进行判空删除
- 遍历物体上的Component当遇到空Component时,删除对应下标的序列化信息
- 注意:每次删除的下标要减去一个已删除个数的偏移因为删除序列化数组的某个信息后,后面的会自动前移怹们的下标就都会减小
- 提示:删除的时候加个Log信息打印处理的内容,对使用者更友好
- 第四步: 保存修改后的序列化信息覆盖原预制体,刪除场景中的物体
- 最后保存完毕记得删除场景上的物体
在最新的版本中DeleteArrayElementAtIndex方法删除序列化清除全部数据会怎么样似乎出现了问题,无论如哬都不允许删除清除全部数据会怎么样会给出错误提醒。2018版本是没有问题的
- 可能是2019版本哪里发现了变动我需要做对应操作才能解锁使尣许删除清除全部数据会怎么样,我还在琢磨
- 可能是2019版本这部分出现了bug我觉得这个可能性比较小
- 最后要是有知道的好心人士希望可以告知一下,谢过~
有什么意见建议欢迎提出啦!-------来自一个刚刚开始工作的小萌新
发布了3 篇原创文章 · 获赞 0 · 访问量 927