游戏蛮牛学习群(纯技术交流,不闲聊):539178957
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2259

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 175|回复: 1

[Y-miku] 一键删除场景中的空引用

[复制链接]  [移动端链接]
排名
441
昨日变化

44

主题

383

帖子

5046

积分

Rank: 9Rank: 9Rank: 9

UID
26484
好友
17
蛮牛币
12686
威望
0
注册时间
2014-5-24
在线时间
2672 小时
最后登录
2018-7-17

游戏蛮牛QQ群会员VIP

QQ
发表于 2018-7-7 23:04:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
在项目中,有时会把不用的脚本删除,但是这样就会导致原有挂载此脚本的物体上有空引用,每次进场景都会有警告。
如果项目小,可以自己手动删,但项目大的话可能会删几千次,很麻烦

解决办法是先将gameobject转为SerializedObject
找到空组件的index后根据index去删除SerializedObject中对应的component
[AppleScript] 纯文本查看 复制代码
Transform[] s = prefab.GetComponentsInChildren<Transform>(true);
        for (int i = 0; i < s.Length; i++)
        {
            var components = s[i].gameObject.GetComponents<Component>();
            var serializedObject = new SerializedObject(s[i].gameObject);
            var prop = serializedObject.FindProperty("m_Component");
            int r = 0;
            for (int j = 0; j < components.Length; j++)
            {
                if (components[j] == null)
                {
                    prop.DeleteArrayElementAtIndex(j - r);
                    r++;
                }
            }
            serializedObject.ApplyModifiedProperties();
        }



但是有一个问题,删除之后切换场景时unity会崩溃
可能是由于其他地方也有gameobj的SerializedObject形式
如果我们在自己的SerializedObject上删除组件并实施到gamobj上,会导致其他地方的SerializedObject丢失对gameobj上组件的引用,造成野指针
解决方法是:
先将物体作为一个Prefab,之后修改prefab,最后再实例化出来,就不会崩溃了
[AppleScript] 纯文本查看 复制代码
GameObject prefab = PrefabUtility.CreatePrefab("Assets" + "/"+prefabName+".prefab", Root);



回复

使用道具 举报

5熟悉之中
620/1000
排名
3365
昨日变化
11

0

主题

43

帖子

620

积分

Rank: 5Rank: 5

UID
231194
好友
0
蛮牛币
1977
威望
0
注册时间
2017-7-10
在线时间
167 小时
最后登录
2018-7-18
发表于 昨天 09:55 | 显示全部楼层
把预制体拖至场景内,空引用还是存在,而且先前场景物体的空应用莫名恢复了

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表