Unity 获得Sprite中的子精灵

无论是UGUI中的Image,还是Unity2D中的SpriteRenderer都需要Sprite(精灵)类型的图片资源。不免就有获得子精灵的需求。

这个是老问题了,官方论坛提到很多次,用户也向官方提交了需求申请:
https://feedback.unity3d.com/suggestions/allow-access-to-sprite-packer-atlas-to-retrieve-sprites-by-name

网上找了很多,发现很多人的方案是使用Unity新提供的SpriteAtlas。
https://www.cnblogs.com/mcyushao/p/9670903.html
https://docs.unity3d.com/Manual/class-SpriteAtlas.html
相关代码如下:

        SpriteAtlas sa = Resources.Load<SpriteAtlas>("path");
        Sprite s = sa.GetSprite("name");

笔者这边的需求是依旧要使用老的图集方案,获得子精灵。

推荐方案

其实unity中已经提供了API,不知道为啥网上还是各种乱七八糟的方案。

1,根据子精灵获得父贴图

1.1 对于UGUI Image
img.mainTextureimg.sprite.texture 都可获得父贴图
1.2 对于Unity2D SpriteRenderer
sr.sprite.texture即可获得父贴图

2,根据父贴图获得子精灵

2.1 假设父贴图已经单独打为AssetBundle
Sprite[] sprites = ab.LoadAllAssets<Sprite>();传入类型Sprite,则可以直接获得该ab中的子精灵
sprites[0].texture可以获得父贴图

var res=ab.LoadAllAssets();则获得该父贴图对应的ab的所有资源,其中res[0]为父贴图Texture2D,其它的为子精灵。

2.2 精灵放在Resources目录下
Sprite[] sprites = Resources.LoadAll<Sprite>(path);

补充

但是目前依旧没有直接API通过精灵的父物体(Texture2D类型)获得其子Sprites。
相关需求:https://forum.unity.com/threads/get-sprite-s-of-a-texture2d-at-runtime.1319121/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值