예제 #1
0
    /// <summary>
    /// 解析quad标签  主要清除quad乱码 获取表情的位置
    /// </summary>
    /// <param name="verts"></param>
    void CalcQuadTag(IList <UIVertex> verts)
    {
        m_AnimSpriteInfor = new List <InlineSpriteInfor[]>();

        Vector3 _TempStartPos = Vector3.zero;

        if (m_SGManager != null)
        {
            _TempStartPos = transform.position - m_SGManager.transform.position;
        }

        for (int i = 0; i < m_AnimSpiteTag.Count; i++)
        {
            SpriteTagInfor[]    tempTagInfor    = m_AnimSpiteTag[i];
            InlineSpriteInfor[] tempSpriteInfor = new InlineSpriteInfor[tempTagInfor.Length];
            for (int j = 0; j < tempTagInfor.Length; j++)
            {
                tempSpriteInfor[j]         = new InlineSpriteInfor();
                tempSpriteInfor[j].textpos = _TempStartPos + verts[((tempTagInfor[j].index + 1) * 4) - 1].position;
                //设置图片的位置
                tempSpriteInfor[j].vertices    = new Vector3[4];
                tempSpriteInfor[j].vertices[0] = new Vector3(0, 0, 0) + tempSpriteInfor[j].textpos;
                tempSpriteInfor[j].vertices[1] = new Vector3(tempTagInfor[j].size.x, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos;
                tempSpriteInfor[j].vertices[2] = new Vector3(tempTagInfor[j].size.x, 0, 0) + tempSpriteInfor[j].textpos;
                tempSpriteInfor[j].vertices[3] = new Vector3(0, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos;

                //计算其uv
                Rect newSpriteRect = m_spriteAsset.listSpriteInfor[0].rect;
                for (int m = 0; m < m_spriteAsset.listSpriteInfor.Count; m++)
                {
                    //通过标签的名称去索引spriteAsset里所对应的sprite的名称
                    if (tempTagInfor[j].name == m_spriteAsset.listSpriteInfor[m].name)
                    {
                        newSpriteRect = m_spriteAsset.listSpriteInfor[m].rect;
                    }
                }
                Vector2 newTexSize = new Vector2(m_spriteAsset.texSource.width, m_spriteAsset.texSource.height);

                tempSpriteInfor[j].uv    = new Vector2[4];
                tempSpriteInfor[j].uv[0] = new Vector2(newSpriteRect.x / newTexSize.x, newSpriteRect.y / newTexSize.y);
                tempSpriteInfor[j].uv[1] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);
                tempSpriteInfor[j].uv[2] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, newSpriteRect.y / newTexSize.y);
                tempSpriteInfor[j].uv[3] = new Vector2(newSpriteRect.x / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);

                //声明三角顶点所需要的数组
                tempSpriteInfor[j].triangles = new int[6];
            }
            m_AnimSpriteInfor.Add(tempSpriteInfor);

            _OldVerts = verts;
        }
    }
    void SaveSpriteInfor(Vector3 textpos, float spriteSize, int spriteIndex)
    {
        //if (spriteIndex >= m_spriteAsset.listSpriteInfor.Count)
        //    return;

        // float spriteSize = m_text.fontSize;
        InlineSpriteInfor tempSprite = new InlineSpriteInfor();

        //  tempSprite.textpos = new Vector3(fWidth, -fFontSize, 0.0f);
        tempSprite.textpos     = textpos;
        tempSprite.vertices    = new Vector3[4];
        tempSprite.vertices[0] = new Vector3(0, 0, 0) + tempSprite.textpos;
        tempSprite.vertices[1] = new Vector3(spriteSize, spriteSize, 0) + tempSprite.textpos;
        tempSprite.vertices[2] = new Vector3(spriteSize, 0, 0) + tempSprite.textpos;
        tempSprite.vertices[3] = new Vector3(0, spriteSize, 0) + tempSprite.textpos;

        Rect spriteRect = m_spriteAsset.listSpriteInfor[0].rect;

        for (int i = 0; i < m_spriteAsset.listSpriteInfor.Count; i++)
        {
            if (spriteIndex == m_spriteAsset.listSpriteInfor[i].ID)
            {
                spriteRect = m_spriteAsset.listSpriteInfor[i].rect;
            }
        }

        Vector2 texSize = new Vector2(m_spriteAsset.texSource.width, m_spriteAsset.texSource.height);

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

        tempSprite.triangles = new int[6];
        //tempSprite.triangles[0] = 0;
        //tempSprite.triangles[1] = 1;
        //tempSprite.triangles[2] = 2;
        //tempSprite.triangles[3] = 1;
        //tempSprite.triangles[4] = 0;
        //tempSprite.triangles[5] = 3;

        listSprite.Add(tempSprite);
    }
예제 #3
0
    /// <summary>
    /// 解析quad标签  主要清除quad乱码 获取表情的位置
    /// </summary>
    /// <param name="verts"></param>
    void CalcQuadTag(IList <UIVertex> verts)
    {
        m_AnimSpriteInfor = new Dictionary <int, InlineSpriteInfor[]>();

        //通过标签信息来设置需要绘制的图片的信息
        listSprite = new List <InlineSpriteInfor>();
        for (int i = 0; i < listTagInfor.Count; i++)
        {
            //UGUIText不支持<quad/>标签,表现为乱码,我这里将他的uv全设置为0,清除乱码
            //for (int m = listTagInfor[i].index * 4; m < listTagInfor[i].index * 4 + listTagInfor[i].Length * 4; m++)
            //{
            //    UIVertex tempVertex = verts[m];
            //    Debug.Log(listTagInfor[i].index + "  " + m + "  " +tempVertex.position + "  " + tempVertex.tangent+ "   "+tempVertex.uv0);

            //    tempVertex.uv0 = Vector2.zero;
            //    verts[m] = tempVertex;
            //}

            InlineSpriteInfor tempSprite = new InlineSpriteInfor();

            //获取表情的第一个位置,则计算他的位置为quad占位的第四个点   顶点绘制顺序:
            //                                                                              0    1
            //                                                                              3    2
            //tempSprite.textpos = verts[((listTagInfor[i].index + 1) * 4) - 1].position;
            tempSprite.textpos = verts[((listTagInfor[i].index - 1) * 4) + 2].position;

            //设置图片的位置
            tempSprite.vertices    = new Vector3[4];
            tempSprite.vertices[0] = new Vector3(0, 0, 0) + tempSprite.textpos;
            tempSprite.vertices[1] = new Vector3(listTagInfor[i].size.x, listTagInfor[i].size.y, 0) + tempSprite.textpos;
            tempSprite.vertices[2] = new Vector3(listTagInfor[i].size.x, 0, 0) + tempSprite.textpos;
            tempSprite.vertices[3] = new Vector3(0, listTagInfor[i].size.y, 0) + tempSprite.textpos;

            //计算其uv
            Rect spriteRect = m_spriteAsset.listSpriteInfor[0].rect;
            for (int j = 0; j < m_spriteAsset.listSpriteInfor.Count; j++)
            {
                //通过标签的名称去索引spriteAsset里所对应的sprite的名称
                if (listTagInfor[i].name == m_spriteAsset.listSpriteInfor[j].name)
                {
                    spriteRect = m_spriteAsset.listSpriteInfor[j].rect;
                }
            }
            Vector2 texSize = new Vector2(m_spriteAsset.texSource.width, m_spriteAsset.texSource.height);

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

            //声明三角顶点所需要的数组
            tempSprite.triangles = new int[6];
            listSprite.Add(tempSprite);


            if (m_AnimSpiteTag[i] != null)
            {
                SpriteTagInfor[]    tempTagInfor    = m_AnimSpiteTag[i];
                InlineSpriteInfor[] tempSpriteInfor = new InlineSpriteInfor[tempTagInfor.Length];
                for (int j = 0; j < tempTagInfor.Length; j++)
                {
                    tempSpriteInfor[j] = new InlineSpriteInfor();

                    tempSpriteInfor[j].textpos = verts[((tempTagInfor[j].index + 1) * 4) - 1].position;
                    //设置图片的位置
                    tempSpriteInfor[j].vertices    = new Vector3[4];
                    tempSpriteInfor[j].vertices[0] = new Vector3(0, 0, 0) + tempSpriteInfor[j].textpos;
                    tempSpriteInfor[j].vertices[1] = new Vector3(tempTagInfor[j].size.x, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos;
                    tempSpriteInfor[j].vertices[2] = new Vector3(tempTagInfor[j].size.x, 0, 0) + tempSpriteInfor[j].textpos;
                    tempSpriteInfor[j].vertices[3] = new Vector3(0, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos;

                    //计算其uv
                    Rect newSpriteRect = m_spriteAsset.listSpriteInfor[0].rect;
                    for (int m = 0; m < m_spriteAsset.listSpriteInfor.Count; m++)
                    {
                        //通过标签的名称去索引spriteAsset里所对应的sprite的名称
                        if (tempTagInfor[j].name == m_spriteAsset.listSpriteInfor[m].name)
                        {
                            newSpriteRect = m_spriteAsset.listSpriteInfor[m].rect;
                        }
                    }
                    Vector2 newTexSize = new Vector2(m_spriteAsset.texSource.width, m_spriteAsset.texSource.height);

                    tempSpriteInfor[j].uv    = new Vector2[4];
                    tempSpriteInfor[j].uv[0] = new Vector2(newSpriteRect.x / newTexSize.x, newSpriteRect.y / newTexSize.y);
                    tempSpriteInfor[j].uv[1] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);
                    tempSpriteInfor[j].uv[2] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, newSpriteRect.y / newTexSize.y);
                    tempSpriteInfor[j].uv[3] = new Vector2(newSpriteRect.x / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y);

                    //声明三角顶点所需要的数组
                    tempSpriteInfor[j].triangles = new int[6];
                }
                m_AnimSpriteInfor.Add(i, tempSpriteInfor);
            }
        }
    }
예제 #4
0
    /// <summary>
    /// 解析quad标签  主要清除quad乱码 获取表情的位置
    /// </summary>
    /// <param name="verts"></param>
    void CalcQuadTag(IList <UIVertex> verts)
    {
        if (m_AnimSpriteInfor != null)
        {
            m_AnimSpriteInfor.Clear();
        }
        else
        {
            m_AnimSpriteInfor = new TList <InlineSpriteInfor[]>();
        }

        //通过标签信息来设置需要绘制的图片的信息
        if (listSprite != null)
        {
            listSprite.Clear();
        }
        else
        {
            listSprite = new TList <InlineSpriteInfor>();
        }

        for (int i = 0; i < m_AnimSpiteTag.Count; i++)
        {
            TList <SpriteTagInfor> tempTagInfor    = m_AnimSpiteTag[i];
            InlineSpriteInfor[]    tempSpriteInfor = new InlineSpriteInfor[tempTagInfor.Count];
            for (int j = 0; j < tempTagInfor.Count; j++)
            {
                tempSpriteInfor[j] = new InlineSpriteInfor();
                //Vector3 offset = Vector3.zero;
                Vector3 offset = new Vector3(0, tempTagInfor[j].size.y * 0.2f, 0);

                //if (tempTagInfor[j].index == 0)
                //{
                //    Vector2 anchorPivot = GetTextAnchorPivot(alignment);
                //    Vector2 rectSize = rectTransform.sizeDelta;
                //    //相对中心点位置 '- 0.5' + '0.5'
                //    tempSpriteInfor[j].textpos = -rectSize / 2.0f + new Vector2(rectSize.x * anchorPivot.x, rectSize.y * anchorPivot.y - tempTagInfor[i].size.y);
                //}
                //else
                //{
                //    tempSpriteInfor[j].textpos = verts[((tempTagInfor[j].index) * 4) - 1].position;
                //}

                tempSpriteInfor[j].textpos = verts[((tempTagInfor[j].index + 1) * 4) - 1].position;//第一字符
                //设置图片的位置
                tempSpriteInfor[j].vertices    = new Vector3[4];
                tempSpriteInfor[j].vertices[0] = new Vector3(0, 0, 0) + tempSpriteInfor[j].textpos - offset;
                tempSpriteInfor[j].vertices[1] = new Vector3(tempTagInfor[j].size.x, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos - offset;
                tempSpriteInfor[j].vertices[2] = new Vector3(tempTagInfor[j].size.x, 0, 0) + tempSpriteInfor[j].textpos - offset;
                tempSpriteInfor[j].vertices[3] = new Vector3(0, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos - offset;

                //计算其uv
                Rect newSpriteRect = m_spriteAsset.listSpriteInfor[0].rect;
                for (int m = 0; m < m_spriteAsset.listSpriteInfor.Count; m++)
                {
                    //通过标签的名称去索引spriteAsset里所对应的sprite的名称
                    //if (tempTagInfor[j].name == m_spriteAsset.listSpriteInfor[m].name)
                    if (m_spriteAsset.listSpriteInfor[m].name.StartsWith(tempTagInfor[j].name))
                    {
                        newSpriteRect = m_spriteAsset.listSpriteInfor[m].rect;
                        break;
                    }
                }
                //Vector2 newTexSize = m_spriteAsset.sourceSize;

                tempSpriteInfor[j].uv    = new Vector2[4];
                tempSpriteInfor[j].uv[0] = new Vector2(newSpriteRect.x / m_spriteAsset.sourceSize.x, newSpriteRect.y / m_spriteAsset.sourceSize.y);
                tempSpriteInfor[j].uv[1] = new Vector2((newSpriteRect.x + newSpriteRect.width) / m_spriteAsset.sourceSize.x, (newSpriteRect.y + newSpriteRect.height) / m_spriteAsset.sourceSize.y);
                tempSpriteInfor[j].uv[2] = new Vector2((newSpriteRect.x + newSpriteRect.width) / m_spriteAsset.sourceSize.x, newSpriteRect.y / m_spriteAsset.sourceSize.y);
                tempSpriteInfor[j].uv[3] = new Vector2(newSpriteRect.x / m_spriteAsset.sourceSize.x, (newSpriteRect.y + newSpriteRect.height) / m_spriteAsset.sourceSize.y);
                //Debug.Log(newSpriteRect.x + "_" + newSpriteRect.y + "_" + newSpriteRect.min.ToString());
                //tempSpriteInfor[j].uv[0] = new Vector2(newSpriteRect.min.x / m_spriteAsset.sourceSize.x, newSpriteRect.min.y / m_spriteAsset.sourceSize.y);
                //tempSpriteInfor[j].uv[1] = new Vector2((newSpriteRect.min.x + newSpriteRect.width) / m_spriteAsset.sourceSize.x, (newSpriteRect.min.y + newSpriteRect.height) / m_spriteAsset.sourceSize.y);
                //tempSpriteInfor[j].uv[2] = new Vector2((newSpriteRect.min.x + newSpriteRect.width) / m_spriteAsset.sourceSize.x, newSpriteRect.min.y / m_spriteAsset.sourceSize.y);
                //tempSpriteInfor[j].uv[3] = new Vector2(newSpriteRect.min.x / m_spriteAsset.sourceSize.x, (newSpriteRect.min.y + newSpriteRect.height) / m_spriteAsset.sourceSize.y);

                //声明三角顶点所需要的数组
                tempSpriteInfor[j].triangles = new int[6];
            }
            m_AnimSpriteInfor.Add(tempSpriteInfor);
            listSprite.Add(tempSpriteInfor[0]);
        }
        //_OldVerts = verts;
    }