コード例 #1
0
ファイル: URichTextSprite.cs プロジェクト: zwong91/Titan
    public void Update()
    {
        if (!isInit)
        {
            return;
        }

        time += Time.deltaTime;
        if (time > 1 / frameFps)
        {
            time = 0;
            if (animSpriteMeshInfoIndexs.Count > 0)
            {
                foreach (var animKey in animSpriteMeshInfoIndexs)
                {
                    if (dicSpriteMeshInfos.ContainsKey(animKey))
                    {
                        URichTextSpriteMeshInfo meshinfo = dicSpriteMeshInfos[animKey];
                        if (meshinfo != null)
                        {
                            int curIndex = meshinfo.spriteIndex;
                            curIndex++;
                            curIndex             = curIndex % meshinfo.animLen;
                            meshinfo.spriteIndex = curIndex;
                            RecaculateAnimSpriteMesh(meshinfo);
                        }
                    }
                }
                DrawAnimatorSprite();
            }
        }
    }
コード例 #2
0
ファイル: URichTextSprite.cs プロジェクト: zwong91/Titan
    //动画表情:重新计算uv
    private bool RecaculateAnimSpriteMesh(URichTextSpriteMeshInfo meshInfo)
    {
        int spriteID = 0;

        if (mainTexture == null)
        {
            return(false);
        }

        Data.AnimSpriteConfig.SSchemeAnimFrameData frameData = Data.AnimSpriteConfig.AnimSpriteConfig.Instance.GetData(meshInfo.animKey);

        Rect newSpriteRect = frameData.GetFrameRect(meshInfo.spriteIndex);//sInfo.rect;

        //由于位置不变,改变uv即可
        //由于uv原点在左下角,但一般算sprite 坐标时按左上角,所以翻转一下
        Vector2 newTexSize = new Vector2(m_mainTexture.width, m_mainTexture.height);

        meshInfo.uvs[3] = new Vector2(newSpriteRect.x / newTexSize.x, 1 - (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);
        //new Vector2(newSpriteRect.x / newTexSize.x, newSpriteRect.y / newTexSize.y);
        meshInfo.uvs[1] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, 1 - newSpriteRect.y / newTexSize.y);
        //new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);
        meshInfo.uvs[2] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, 1 - (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);
        //new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, newSpriteRect.y / newTexSize.y);
        meshInfo.uvs[0] = new Vector2(newSpriteRect.x / newTexSize.x, 1 - newSpriteRect.y / newTexSize.y);
        //new Vector2(newSpriteRect.x / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);
        return(true);
    }
コード例 #3
0
ファイル: URichTextSprite.cs プロジェクト: zwong91/Titan
    public void UpdateSpriteMeshInfo(URichTextSpriteMeshInfo info)
    {
        info.isDirty = true;
        //处于字符串位置一致时确认下,内容也是否一致
        if (dicSpriteMeshInfos.ContainsKey(info.vertices[0]))
        {
            //if (dicSpriteMeshInfos[info.place].animKey != info.animKey)
            {
                dicSpriteMeshInfos[info.vertices[0]] = info;
            }
        }
        else
        {
            dicSpriteMeshInfos.Add(info.vertices[0], info);
        }

        m_mainTexture = USpriteManager.Instance.GetAnimSprite(info.animKey).texture;
    }
コード例 #4
0
        //字符串网格控制
        public override bool HandleTextMesh(URichTextParseInfo info)
        {
            if (!Application.isPlaying)
            {
                Debug.LogWarning("请在运行模式下观察富文本转图片结果");
                return(false);
            }

            if (info.vertStartIndex < 0)
            {
                return(false);
            }

            List <UIVertex> uivertList = new List <UIVertex>();

            vHelper.GetUIVertexStream(uivertList);
            // 移除角落产生的字符纹理
            if (info.vertStartIndex * 6 + 6 > uivertList.Count)
            {
                return(false);
            }

            int spriteIndex = 0;

            Data.AnimSpriteConfig.SSchemeAnimFrameData frameData = Data.AnimSpriteConfig.AnimSpriteConfig.Instance.GetData(info.values[1].Value);
            if (frameData == null)
            {
                return(false);
            }
            Rect newSpriteRect = frameData.GetFrameRect(spriteIndex);//sInfo.rect;
            URichTextSpriteMeshInfo meshInfo = new URichTextSpriteMeshInfo();

            if (frameData.nAnimFrame > 0)
            {
                meshInfo.animKey = frameData.strAnimName;
            }
            else
            {
                meshInfo.animKey = "";
            }

            meshInfo.animLen     = frameData.nAnimFrame == 0?1: frameData.nAnimFrame;
            meshInfo.spriteIndex = spriteIndex;
            meshInfo.place       = info.startIndex;
            //顶点:
            //textpos:图片的左上角
            //之前的富文本被隐藏部分也会占用顶点!!
            //每个索引一个顶点...所以要乘以6
            Vector3 textpos = uivertList[info.vertStartIndex * 6].position;
            int     size    = int.Parse(info.values[2].Value);
            int     width   = int.Parse(info.values[3].Value);

            //设置图片的位置
            meshInfo.vertices[0] = new Vector3(0, 0, 0) + textpos;
            meshInfo.vertices[1] = new Vector3(size * width, 0, 0) + textpos;
            meshInfo.vertices[2] = new Vector3(size * width, -size, 0) + textpos;
            meshInfo.vertices[3] = new Vector3(0, -size, 0) + textpos;
            //uv
            Sprite frameSprite = USpriteManager.Instance.GetAnimSprite(frameData.strAnimName);

            if (frameSprite == null)
            {
                return(false);
            }
            Vector2 newTexSize = new Vector2(frameSprite.texture.width, frameSprite.texture.height);

            meshInfo.uvs[3] = new Vector2(newSpriteRect.x / newTexSize.x, 1 - (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);
            //new Vector2(newSpriteRect.x / newTexSize.x, newSpriteRect.y / newTexSize.y);
            meshInfo.uvs[1] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, 1 - newSpriteRect.y / newTexSize.y);
            //new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);
            meshInfo.uvs[2] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, 1 - (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);
            //new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, newSpriteRect.y / newTexSize.y);
            meshInfo.uvs[0] = new Vector2(newSpriteRect.x / newTexSize.x, 1 - newSpriteRect.y / newTexSize.y);
            //new Vector2(newSpriteRect.x / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);


            meshInfo.colors[0] = Color.white;
            meshInfo.colors[1] = Color.white;
            meshInfo.colors[2] = Color.white;
            meshInfo.colors[3] = Color.white;

            //索引先不处理

            TextSprite.UpdateSpriteMeshInfo(meshInfo);

            return(true);
        }