コード例 #1
0
    private List <TexturePackSprite> CreateSpriteFromUnityPackSetting(TextureImporter importer)
    {
        List <TexturePackSprite> list = new List <TexturePackSprite>();

        RichTextAnimateDic.Clear();
        for (int i = 0; i < importer.spritesheet.Length; i++)
        {
            SpriteMetaData frame = importer.spritesheet[i];

            TexturePackSprite spriteData = new TexturePackSprite();
            spriteData.id       = i;
            spriteData.name     = frame.name;
            spriteData.hashCode = spriteData.name.GetHashCode();


            spriteData.x        = frame.rect.x;
            spriteData.y        = frame.rect.y;
            spriteData.width    = frame.rect.width;
            spriteData.height   = frame.rect.height;
            spriteData.pivot    = frame.pivot;
            spriteData.rotated  = false;
            spriteData.xAdvance = spriteData.width;
            spriteData.scale    = 1f;
            spriteData.xOffset  = 0f - spriteData.width * spriteData.pivot.x;
            spriteData.yOffset  = spriteData.height - spriteData.height * spriteData.pivot.y;

            list.Add(spriteData);

            int pos = spriteData.name.LastIndexOf("_");

            if (pos > 0)
            {
                string key      = spriteData.name.Substring(0, pos);
                string aniIndex = spriteData.name.Substring(pos + 1, spriteData.name.Length - pos - 1);

                if (!RichTextAnimateDic.ContainsKey(key))
                {
                    RichTextAnimate richTextAnimate = new RichTextAnimate();
                    RichTextAnimateDic.Add(key, richTextAnimate);
                }

                spriteData.animatGroup = key;
                spriteData.animatIndex = int.Parse(aniIndex);


                RichTextAnimateDic[key].animateName = key;
                RichTextAnimateDic[key].frameCount++;
                RichTextAnimateDic[key].spriteList.Add(spriteData);
            }
        }
        return(list);
    }
コード例 #2
0
    private List <TexturePackSprite> CreateSpriteInfoList(TP.TexturePackJsonData spriteDataObject)
    {
        List <TP.SpriteData>     frames = spriteDataObject.frames;
        List <TexturePackSprite> list   = new List <TexturePackSprite>();

        for (int i = 0; i < frames.Count; i++)
        {
            TexturePackSprite spriteData = new TexturePackSprite();
            spriteData.id       = i;
            spriteData.name     = Path.GetFileNameWithoutExtension(frames[i].filename);
            spriteData.hashCode = spriteData.name.GetHashCode();

            spriteData.x        = frames[i].frame.x;
            spriteData.y        = (float)this.TextureSource.height - (frames[i].frame.y + frames[i].frame.h);
            spriteData.width    = frames[i].frame.w;
            spriteData.height   = frames[i].frame.h;
            spriteData.pivot    = frames[i].pivot;
            spriteData.rotated  = frames[i].rotated;
            spriteData.xAdvance = spriteData.width;
            spriteData.scale    = 1f;
            spriteData.xOffset  = 0f - spriteData.width * spriteData.pivot.x;
            spriteData.yOffset  = spriteData.height - spriteData.height * spriteData.pivot.y;

            list.Add(spriteData);

            int pos = spriteData.name.LastIndexOf("_");

            if (pos > 0)
            {
                string key      = spriteData.name.Substring(0, pos);
                string aniIndex = spriteData.name.Substring(pos + 1, spriteData.name.Length - pos - 1);

                if (!RichTextAnimateDic.ContainsKey(key))
                {
                    RichTextAnimate richTextAnimate = new RichTextAnimate();
                    RichTextAnimateDic.Add(key, richTextAnimate);
                }

                //动画
                spriteData.animatGroup = key;
                spriteData.animatIndex = int.Parse(aniIndex);


                RichTextAnimateDic[key].animateName = key;
                RichTextAnimateDic[key].frameCount++;
                RichTextAnimateDic[key].spriteList.Add(spriteData);
            }
        }
        return(list);
    }
コード例 #3
0
    /// <summary>
    /// 生成新的UV,用帧动画
    /// </summary>
    /// <param name="sprite"></param>
    /// <param name="tempUv"></param>
    /// <returns></returns>
    protected TextMeshInfo GenerateNewUv(TexturePackSprite sprite, ref TextMeshInfo tempUv)
    {
        //TexUvInfo tempUv = new TexUvInfo();
        //计算其uv
        Vector2 texSize = Vector2.zero;

        texSize = new Vector2(textSpriteAsset.spriteSheet.width, textSpriteAsset.spriteSheet.height);

        tempUv.uv[0] = new Vector2(sprite.x / texSize.x, sprite.y / texSize.y);
        tempUv.uv[1] = new Vector2((sprite.x + sprite.width) / texSize.x, (sprite.y + sprite.height) / texSize.y);
        tempUv.uv[2] = new Vector2((sprite.x + sprite.width) / texSize.x, sprite.y / texSize.y);
        tempUv.uv[3] = new Vector2(sprite.x / texSize.x, (sprite.y + sprite.height) / texSize.y);

        return(tempUv);
    }
コード例 #4
0
    /// <summary>
    /// 生成uv信息
    /// </summary>
    /// <param name="info"></param>
    /// <param name="startVertex"></param>
    /// <param name="unitsPerPixel"></param>
    /// <returns></returns>
    public int GenerateVertices(QuadPlaceholder info, Vector3 postion, int startVertex, float unitsPerPixel)
    {
        TextMeshInfo tempUv = new TextMeshInfo();

        tempUv.startPos = postion * unitsPerPixel;

        //设置图片的位置
        tempUv.vertices    = new Vector3[4];
        tempUv.vertices[0] = new Vector3(0, 0, 0) + tempUv.startPos;
        tempUv.vertices[1] = new Vector3(info.size.x, info.size.y, 0) + tempUv.startPos;
        tempUv.vertices[2] = new Vector3(info.size.x, 0, 0) + tempUv.startPos;
        tempUv.vertices[3] = new Vector3(0, info.size.y, 0) + tempUv.startPos;


        TexturePackSprite sprite = null;

        if (info.isAnimate)
        {
            RichTextAnimate textAnimate = textSpriteAsset.GetAnimateListByName(info.animateName);
            if (textAnimate != null)
            {
                sprite = textAnimate.spriteList[0];
            }
        }
        else if (textSpriteAsset.spriteInfoList != null)
        {
            int index = int.Parse(info.sprite);
            if (textSpriteAsset.spriteInfoList.Count > index)
            {
                sprite = textSpriteAsset.spriteInfoList[index];
            }
        }

        Vector2 texSize = Vector2.zero;

        if (sprite == null)
        {
            startVertex += 4 * info.length - 1;
            return(startVertex);
        }

        //计算其uv
        texSize   = new Vector2(textSpriteAsset.spriteSheet.width, textSpriteAsset.spriteSheet.height);
        tempUv.uv = new Vector2[4];

        if (!sprite.rotated)
        {
            tempUv.uv[0] = new Vector2(sprite.x / texSize.x, sprite.y / texSize.y);
            tempUv.uv[1] = new Vector2((sprite.x + sprite.width) / texSize.x, (sprite.y + sprite.width) / texSize.y);
            tempUv.uv[2] = new Vector2((sprite.x + sprite.width) / texSize.x, sprite.y / texSize.y);
            tempUv.uv[3] = new Vector2(sprite.x / texSize.x, (sprite.y + sprite.width) / texSize.y);
        }
        else
        {
            tempUv.uv[0] = new Vector2(sprite.x / texSize.x, sprite.y / texSize.y);
            tempUv.uv[1] = new Vector2((sprite.x + sprite.width) / texSize.x, (sprite.y + sprite.width) / texSize.y);
            tempUv.uv[2] = new Vector2((sprite.x + sprite.width) / texSize.x, sprite.y / texSize.y);
            tempUv.uv[3] = new Vector2(sprite.x / texSize.x, (sprite.y + sprite.width) / texSize.y);
        }
        //声明三角顶点所需要的数组
        tempUv.triangles = new int[6];
        startVertex     += 4 * info.length - 1;

        RendererInfo rendererInfo = new RendererInfo();

        rendererInfo.uvInfo      = tempUv;
        rendererInfo.placeholder = info;
        m_RendererInfo.Add(rendererInfo);

        return(startVertex);
    }