示例#1
0
    /// <summary>
    /// 帧动画更新
    /// </summary>
    public void LateUpdate()
    {
        for (int index = 0; index < m_RendererInfo.Count; index++)
        {
            RendererInfo rendererInfo = m_RendererInfo[index];
            if (rendererInfo.placeholder.isAnimate)
            {
                rendererInfo.timeline += Time.deltaTime;
                if (rendererInfo.timeline >= (1 / (float)rendererInfo.placeholder.rate))
                {
                    int                      frame           = rendererInfo.curFrame + 1;
                    string                   animateName     = rendererInfo.placeholder.animateName;
                    RichTextAnimate          richTextAnimate = textSpriteAsset.GetAnimateListByName(animateName);
                    List <TexturePackSprite> sprites         = richTextAnimate.spriteList;

                    if (frame >= sprites.Count)
                    {
                        frame = 0;
                    }

                    GenerateNewUv(sprites[frame], ref rendererInfo.uvInfo);
                    rendererInfo.timeline = 0.0f;
                    rendererInfo.curFrame = frame;
                    PlayAnimate();
                }
            }
        }
    }
    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);
    }
    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);
    }
示例#4
0
    /// <summary>
    /// 获取动画所有帧
    /// </summary>
    /// <param name="animateName"></param>
    /// <returns></returns>
    public RichTextAnimate GetAnimateListByName(string animateName)
    {
        if (m_AnimateList == null)
        {
            return(null);
        }

        RichTextAnimate textAnimate = null;

        for (int i = 0; i < m_AnimateList.Count; i++)
        {
            if (m_AnimateList[i].animateName == animateName)
            {
                textAnimate = m_AnimateList[i];
                break;
            }
        }

        return(textAnimate);
    }
示例#5
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);
    }