Unity - 模拟Sprite Packer合并多个Sprite

本文介绍了如何在Unity中模拟Sprite Packer功能,将多个单独的Sprite合并为图集以优化资源使用。作者面临动画已制作完成,不便重新调整的情况,通过编写工具自动将Sprite合成为大图集,并处理Anima2D数据的迁移,确保动画在新图集上的正确运行。文章提供了简单的实现思路和Anima2D数据偏移的伪代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity - 模拟Sprite Packer合并多个Sprite


现在做一个卡牌Demo,由于没有沟通好,动画师为了做Anima2D动画方便,把角色每个部位拆分成单个Sprite,这样肯定是不行的,不仅加大了容量,运行时效率也不高。但是由于动画已经做好了,再回去手动合并再修改Anima2D非常麻烦,只好让程序实现一个快捷工具,把单个的Sprite合成一张大图集,把与单个Sprite绑定的Anima2D数据迁移到大图集。忙了一天总算弄好了,现在记录一下。

Sprite Packer

把Sprite合并成图集其实是Unity内置的功能——Sprite Packer,Sprite Packer会把相同Packing Tag的Sprite合并成大图集,我们要做的就是模拟Sprite Packer。简单的一个思路是:把要打包的Sprite放到一个文件下;得到所有单独的Sprite;生成单独的Texture;打包;切分Texture。

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace Utility
{
   
   
    public class AtlasTest
    {
   
   
        [UnityEditor.MenuItem("SpriteAtlas/CreateAtlas")]
        public static void CreateAtlas()
        {
   
   
            string spritePath = string.Empty;
            spritePath = EditorUtility.OpenFolderPanel("选择文件夹", "", "");

            List<Sprite> sprites = new List<Sprite>();
            List<Texture2D> newTexs = new List<Texture2D>();
            List<string> extensions = new List<string>() {
   
    ".png", ".jpg", ".psd" };
            // 找出单独的sprite
            string[] files = Directory.GetFiles(spritePath, "*.*", SearchOption.AllDirectories)
                .Where(s => extensions.Contains(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值