Ejemplo n.º 1
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);
    }
Ejemplo n.º 2
0
        private static Vertex ConvertTextVertexToUIRVertex(TextMeshInfo info, int index, Vector2 offset, VertexFlags flags = VertexFlags.IsText)
        {
            float dilate = 0.0f;

            // If Bold, dilate the shape (this value is hardcoded, should be set from the font actual bold weight)
            if (info.uvs2[index].y < 0.0f)
            {
                dilate = 1.0f;
            }
            return(new Vertex
            {
                position = new Vector3(info.vertices[index].x + offset.x, info.vertices[index].y + offset.y, UIRUtility.k_MeshPosZ),
                uv = new Vector2(info.uvs0[index].x, info.uvs0[index].y),
                tint = info.colors32[index],
                flags = new Color32((byte)flags, (byte)(dilate * 255), 0, 0)
            });
        }
Ejemplo n.º 3
0
        internal static void MakeText(TextMeshInfo meshInfo, Vector2 offset, AllocMeshData meshAlloc, VertexFlags flags = VertexFlags.IsText)
        {
            int vertexCount = LimitTextVertices(meshInfo.vertexCount);
            int quadCount   = vertexCount / 4;
            var mesh        = meshAlloc.Allocate((uint)(quadCount * 4), (uint)(quadCount * 6));

            for (int q = 0, v = 0; q < quadCount; ++q, v += 4)
            {
                mesh.SetNextVertex(ConvertTextVertexToUIRVertex(meshInfo, v + 0, offset, flags));
                mesh.SetNextVertex(ConvertTextVertexToUIRVertex(meshInfo, v + 1, offset, flags));
                mesh.SetNextVertex(ConvertTextVertexToUIRVertex(meshInfo, v + 2, offset, flags));
                mesh.SetNextVertex(ConvertTextVertexToUIRVertex(meshInfo, v + 3, offset, flags));

                mesh.SetNextIndex((UInt16)(v + 0));
                mesh.SetNextIndex((UInt16)(v + 1));
                mesh.SetNextIndex((UInt16)(v + 2));
                mesh.SetNextIndex((UInt16)(v + 2));
                mesh.SetNextIndex((UInt16)(v + 3));
                mesh.SetNextIndex((UInt16)(v + 0));
            }
        }
Ejemplo n.º 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);
    }