在unity 4.x中,我可以归档这个,因为我可以直接选择我的资源类型作为Sprite变量,然后通过BuildAssetBundle将它放入bundle中。但是,在Unity 5.x中,我需要将名称放在编辑器中,我不能仅在编辑器中选择我的资源类型作为Sprite。当我创建bundle时,bundle会同时拥有Texture2D和Sprite,我只想让Sprite保存内存和磁盘空间。只有当我从Prefab创建捆绑而不是图像本身但我只想要原始图像时,捆绑包将排除Texture2D。我该怎么办?
答案 0 :(得分:3)
作为对未来读者的澄清,我考虑了your other question,并且您想要排除原始纹理的原因是因为您使用了Sprite Packer生成的地图集。
简答:只是不要在任何捆绑中添加纹理,让所有内容都在阴影中处理。对于每个捆绑包,任何需要的精灵或地图集都将由需要它的对象引用,因此它们将被包含在内。
长而有洞察力的答案:首先,让我们比较两个AssetBundle建筑管道:
精灵是由纹理的导入设置生成的,并且没有自己的任何AssetImporter
。 Sprite Packer创建的纹理图集是cached in \Library\AtlasCache,所以他们也没有AssetImporters
。
这意味着当个别精灵和打包的地图集是另一个包含资产的依赖关系时,它们只能包含在一个包中。 As said by someone working on it.
如果向包中添加纹理,则会添加它创建的所有精灵(这是CompleteAssets行为),但当然这也会添加纹理本身。 如果添加了一个精灵,它也会添加它使用的纹理(CollectDependencies行为),无论它是项目中的纹理文件还是Sprite Packer地图集。
最重要的是,您不想添加纹理。完全没有。决不。原始纹理仅用于编辑器工作。相反,你需要添加任何引用精灵的 else ,而不是纹理本身。
hackiest 这样做的方法是使用带有这样脚本的预制件:
public class SpriteReferences : UnityEngine.MonoBehaviour {
public UnityEngine.Sprite[] sprites;
}
但是很有可能在你想要添加到包中的所有东西(预制件,场景,scriptableObjects)中,你需要的精灵已被引用,因此它们将被添加,反过来也会添加任何需要的地图集。一切都完成了,没有添加原始纹理。
注意:如果资产包中的单个对象引用精灵,则会添加其整个地图集。保持包装标签的整洁,它们应与您所做的包大致相符。
答案 1 :(得分:0)
Unity在补丁5.1.2p1中修复了此问题。你根本不需要做任何想象。 Unity将为您完成所有工作。只需遵循简单的构建资产包步骤即可。 :)