您的位置:首页 > 移动开发 > Unity3D

unity3d减小安装包大小专题(4):剔除重复资源

2015-02-26 15:30 771 查看
如果你们美术不是很给力的话,是非常容易出现重复资源的情况。那么如果能剔除,当然是最好的了。

先看下无场景的情况下apk大小:61.4M(这里有一个小插曲,本来是74M的,后来发现有一个jpg竟然占了13兆,仔细看了下发现是贴图采用了真彩色无压缩,所以还是使用压缩的先).

然后加上所有场景文件,重新打包一个apk,大小变成:153M。

然后用软件Duplicate Cleaner Free查看下重复文件。

253个重复文件。

那么接下来才是重点,怎么剔除呢,直接删掉肯定不行,因为引用这个文件的所有地方都会出错。那么就要按照下面的操作:

选择一个原始模型,打开其他重复模型场景,将所有的模型改成原始模型,然后删除重复模型,确认后将原始模型拖入common。

替换fbx比较麻烦,要一个个替换,但图片就相对简单了,只要直接设置就可以了。

替换fbx的方法:先找到原始fbx,然后替换材质,可以先拖一个正确的到场景中,全部设置材质后,在break掉和prefab的关系,就不会红色了。

然后比较恶心的是有些fbx替换后直接消失了,也没有红色的提示,这个就只能看你自己先截一张老的场景的图,然后和新的比较。

public class FindMissing:ScriptableObject

{

[MenuItem("Tools/FindMissing")]

static void FindMissingMaterial()

{

Transform[] transforms = Selection.GetTransforms (SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);

foreach(Transform transform in transforms)

{

MeshFilter mesh = transform.GetComponent<MeshFilter>();

if(mesh != null && mesh.sharedMesh == null)

{

mesh.gameObject.SetActive(false);

}

}

}

}

这个脚本可以把有问题的active设置为false.

function CreateObject() {
     var newObj : GameObject = new GameObject();
     newObj.transform.parent = target.transform;

     newObj.hideFlags = HideFlags.HideInHierarchy;
 }

这个脚本我怕弄不回来,就暂时不管了。

然后这真心是一个体力活,诶,下次一定要和美术说好规范。

我搞了一下午,还剩150个重复项,主要的问题还是因为我们场景确实很多,接近40个。

明天继续吧。

又搞了一天,总算弄好了,不知道有没有漏掉的,不过没有关系,以后可以查漏补缺。看看新的apk大小吧:129M

减少了20+M,算是不错的成果了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: