prefab文本序列化的结构,如下图所示,看到!u!111了吗 111 是一组id .它是有意义的(它表示Animation)

本文主要是介绍prefab文本序列化的结构,如下图所示,看到!u!111了吗 111 是一组id .它是有意义的(它表示Animation),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

prefab文本序列化的结构,如下图所示,看到!u!111了吗  111 是一组id .它是有意义的(它表示Animation)

http://www.xuanyusong.com/archives/3727

感谢楼下的牛逼回复更正一下,我表示我也是才知道。。

其实不需要实例化也能查找,你依然直接用GetComponentsInChildren<>(true),对传true即可。。。这样搞还很麻烦。。。唯一关注是能否把Missing的脚本序列化找出来??

使用 GetComponentsInChildren<>(true) 可以直接把Project视图里的子对象找出来!!!!

return;

代码是这样的

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

[MenuItem("Assets/Delete")]

static void delete ()

{

GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/GameObject.prefab");

 

//删除MeshCollider

MeshCollider [] meshColliders = prefab.GetComponentsInChildren<MeshCollider>(true);

foreach(MeshCollider meshCollider in meshColliders){

 

GameObject.DestroyImmediate(meshCollider,true);

}

 

//删除空的Animation组件

Animation [] animations = prefab.GetComponentsInChildren<Animation>(true);

foreach(Animation animation in animations){

if( animation.clip == null){

GameObject.DestroyImmediate(animation,true);

}

 

}

 

//删除missing的脚本组件

MonoBehaviour [] monoBehaviours = prefab.GetComponentsInChildren<MonoBehaviour>(true);

foreach(MonoBehaviour monoBehaviour in monoBehaviours){

 

 

if(monoBehaviour == null){

Debug.Log("有个missing的脚本");

//GameObject.DestroyImmediate(monoBehaviour,true);

 

}

}

 

//遍历Transform的名子, 并且给某个游戏对象添加一个脚本

Transform [] transforms = prefab.GetComponentsInChildren<Transform>(true);

foreach(Transform transfomr in transforms){

if(transfomr.name == "GameObject (1)"){

Debug.Log(transfomr.parent.name);

transfomr.gameObject.AddComponent<BoxCollider>();

return;

}

 

}

//遍历Transform的名子, 删除某个GameObject节点

foreach(Transform transfomr in transforms){

if(transfomr.name == "GameObject (2)"){

GameObject.DestroyImmediate(transfomr.gameObject,true);

return;

}

 

}

                EditorUtility.SetDirty(prefab);

}

 

今天有朋友说不能删除missing的脚本, 我试了一下确实不行。 随后查了一下, 可以用这个方法来删除,

http://answers.unity3d.com/questions/15225/how-do-i-remove-null-components-ie-missingmono-scr.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

[MenuItem("Edit/Cleanup Missing Scripts")]

static void CleanupMissingScripts ()

{

     for(int i = 0; i < Selection.gameObjects.Length; i++)

     {

         var gameObject = Selection.gameObjects[i];

        

         // We must use the GetComponents array to actually detect missing components

         var components = gameObject.GetComponents<Component>();

        

         // Create a serialized object so that we can edit the component list

         var serializedObject = new SerializedObject(gameObject);

         // Find the component list property

         var prop = serializedObject.FindProperty("m_Component");

        

         // Track how many components we've removed

         int r = 0;

        

         // Iterate over all components

         for(int j = 0; j < components.Length; j++)

         {

             // Check if the ref is null

             if(components[j] == null)

             {

                 // If so, remove from the serialized component array

                 prop.DeleteArrayElementAtIndex(j-r);

                 // Increment removed count

                 r++;

             }

         }

        

         // Apply our changes to the game object

         serializedObject.ApplyModifiedProperties();

         //这一行一定要加!!!

         EditorUtility.SetDirty(gameObject);

     }

}

 

昨天晚上睡觉的时候脑洞打开。因为做项目的时候我们可能要在编辑器上做很多检查工具一类的东西。 这里我说几个典型的例子,比如空的Animation组件、丢失的脚本、没用的meshCollider组件。这些东西我们是不需要的,但是美术可能不会不小心加到prefab里。

以前的做法是 先要把Prefab 实例化 Instance以后  然后  GetComponentsInChildren  把所有的组件都取出来。 在进行遍历删除。 然后还要DestroyImmediate 它。 。那么如果prefab数量比较多的话,那么检查一次时间是很漫长的。

如果你只是想找组件 空脚本 一类的。用如下代码就可以不实例化并且找出来。

 

如果你想不实例化并且修改数据的话,那么可以考虑用下面的方法。

1.先把prefab 序列化的方式改成text 用File就可以把prefab的文本信息读出来。

1

File.ReadAllText("xxx/xxx.prefab")

 

2.prefab文本序列化的结构,如下图所示,看到!u!111了吗  111 是一组id .它是有意义的(它表示Animation),标着着这个组件是个啥东西。 具体是什么含义大家可以去这里查 http://docs.unity3d.com/Manual/ClassIDReference.html

Snip20151104_2.pnguploading.4e448015.gif转存失败重新上传取消Unity3D研究院编辑器之不实例化Prefab获取删除更新组件(十五) - 雨松MOMO程序研究院 - 1

 

3.自定义脚本

如果我想查一下看看prefab有没有绑定我自己写的脚本怎么办呢?如下图所 ,guid这一栏 就写的是你的脚本的guid了。

Snip20151104_4.pnguploading.4e448015.gif转存失败重新上传取消Unity3D研究院编辑器之不实例化Prefab获取删除更新组件(十五) - 雨松MOMO程序研究院 - 2

 

然后在脚本对应的mate文件里就记录这这个脚本的guid ,如果这两个id匹配,那么就说明这个prefab里挂着这个脚本了。

Snip20151104_5.pnguploading.4e448015.gif转存失败重新上传取消Unity3D研究院编辑器之不实例化Prefab获取删除更新组件(十五) - 雨松MOMO程序研究院 - 3

 

最后就交给正则表达式做第一步的匹配吧。 这样的话第一步就可以筛选掉一大批prefab了。 如果还需要进行验证在进一步的Instance来检查吧。。

  • 本文固定链接: https://www.xuanyusong.com/archives/3727
  • 转载请注明: 雨松MOMO 2015年11月04日 于 雨松MOMO程序研究院 发

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这篇关于prefab文本序列化的结构,如下图所示,看到!u!111了吗 111 是一组id .它是有意义的(它表示Animation)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/277143

相关文章

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可