Unity3d 有没有一种方法可以构建从图像中排除texture2d的资产包?

Unity3d 有没有一种方法可以构建从图像中排除texture2d的资产包?,unity3d,Unity3d,在Unity4.x中,我可以将其存档,因为我可以直接选择资源类型作为Sprite变量,然后通过BuildAssetBundle将其放入包中。但是,在Unity5.x中,我需要在编辑器中输入名称,因为我不能仅在编辑器中选择资源类型作为Sprite。当我制作捆绑包时,捆绑包将同时具有Texture2D和Sprite,我只希望Sprite能够节省内存和磁盘空间。只有当我从Prefable创建束时,而不是图像本身,但我只想要原始图像,束才会排除Texture2D。我该怎么办?作为对未来读者的澄清,我正在

在Unity4.x中,我可以将其存档,因为我可以直接选择资源类型作为Sprite变量,然后通过BuildAssetBundle将其放入包中。但是,在Unity5.x中,我需要在编辑器中输入名称,因为我不能仅在编辑器中选择资源类型作为Sprite。当我制作捆绑包时,捆绑包将同时具有Texture2D和Sprite,我只希望Sprite能够节省内存和磁盘空间。只有当我从Prefable创建束时,而不是图像本身,但我只想要原始图像,束才会排除Texture2D。我该怎么办?

作为对未来读者的澄清,我正在考虑,您想要排除原始纹理的原因是因为您使用了Sprite Packer生成的图集

简短回答:只是不要在任何包中添加纹理,让所有东西都在阴影中处理。对于每个包,所需的任何精灵或地图集都将被需要它的对象引用,因此它们将被包括在内

长而有见地的回答:首先,让我们比较两个资产组合构建的管道:

  • 在Unity 4.X中,要创建资产绑定,您需要选择要捆绑在一起的资产。然后,您可以使用调用来选择或包括
  • 在Unity5.X中,旧系统被标记为过时,但仍受支持,尽管将来可能不会支持。此外,新系统将得到进一步开发,因此应避免使用旧系统
  • 这条新管道现在已被整合到该系统中。现在,在构建捆绑包时,其行为是在旧方法中同时启用CollectDependencies和CompleteSets
精灵由纹理的导入设置生成,并且没有任何自己的
AssetImporter
。Sprite Packer创建的纹理地图集是,因此它们也没有
AssetImporters
。 这意味着,当单个精灵和打包地图集是另一个包含的资产的依赖项时,它们只能包含在捆绑包中

如果将纹理添加到包中,它创建的所有精灵都将被添加(这是CompleteSets行为),但这当然也会添加纹理本身。 如果添加了一个精灵,它使用的纹理也将被添加(CollectDependencies行为),而不管它是项目中的纹理文件还是sprite Packer atlas

底线是您不想添加纹理。完全从未。原始纹理仅用于编辑器工作。相反,您需要向包中添加任何引用精灵的,而不是纹理本身

最骇客的方法是使用一个带有如下脚本的预置:

public class SpriteReferences : UnityEngine.MonoBehaviour {

    public UnityEngine.Sprite[] sprites;
}
但是,在您想要添加到捆绑包的所有内容(预制、场景、可编写脚本的对象)中,您需要的精灵已经被引用,因此它们将被添加,反过来,任何需要的图集也将被添加。以及在不添加原始纹理的情况下完成的所有操作


注意:如果资产包中的单个对象引用了精灵,则将添加其整个图集。保持你的包装标签井然有序,它们应该大致与你制作的包裹相对应。

Unity在补丁5.1.2p1中解决了这个问题。你根本不需要做任何花哨的事。团结会为你做这一切。只需遵循简单的构建资产包步骤,就可以了。:)

你能上传一个只包含unity 4精灵的资产包吗?解决方案是:你能让它工作吗?Unity API页面将CompleteAssets标记为在5.0中已过时。这就是我在这里问这个问题的原因。:)实际上,它说它已经过时了,但是它仍然在5.0中工作,但是它不能确定未来,因为它当然已经过时了。有关更多信息,请参阅。它仍然在5.0版本中工作,并没有直接回答我的问题,但它仍然是一个非常有用的信息。非常感谢。如果有办法自动将精灵添加到检查器中会更好,因为我有很多精灵,无法手动添加所有精灵。@PaiboonPanusbordee这些精灵不是被其他任何东西引用的吗?