Example #1
0
    private void DrawSprites(int _id)
    {
        if (!_IndexSpriteGraphic.ContainsKey(_id) ||
            !_TextMeshInfo.ContainsKey(_id))
        {
            return;
        }

        SpriteGraphic _spriteGraphic            = _IndexSpriteGraphic[_id]._SpriteGraphic;
        Mesh          _mesh                     = _IndexSpriteGraphic[_id]._Mesh;
        Dictionary <InlineText, MeshInfo> _data = _TextMeshInfo[_id];
        List <Vector3> _vertices                = new List <Vector3>();
        List <Vector2> _uv        = new List <Vector2>();
        List <int>     _triangles = new List <int>();

        foreach (var item in _data)
        {
            if (item.Key == null)
            {
                continue;
            }

            for (int i = 0; i < item.Value._Vertices.Length; i++)
            {
                //添加顶点
                _vertices.Add(item.Value._Vertices[i]);
                //添加uv
                _uv.Add(item.Value._UV[i]);
            }
            //添加顶点索引
            for (int i = 0; i < item.Value._Triangles.Length; i++)
            {
                _triangles.Add(item.Value._Triangles[i]);
            }
        }
        //计算顶点绘制顺序
        for (int i = 0; i < _triangles.Count; i++)
        {
            if (i % 6 == 0)
            {
                int num = i / 6;
                _triangles[i + 0] = 0 + 4 * num;
                _triangles[i + 1] = 1 + 4 * num;
                _triangles[i + 2] = 2 + 4 * num;

                _triangles[i + 3] = 0 + 4 * num;
                _triangles[i + 4] = 2 + 4 * num;
                _triangles[i + 5] = 3 + 4 * num;
            }
        }
        _mesh.Clear();
        _mesh.vertices  = _vertices.ToArray();
        _mesh.uv        = _uv.ToArray();
        _mesh.triangles = _triangles.ToArray();

        _spriteGraphic.canvasRenderer.SetMesh(_mesh);
        _spriteGraphic.UpdateMaterial();
    }
    private void DrawSprites(int id)
    {
        if (!_indexSpriteGraphic.ContainsKey(id) ||
            !_textMeshInfo.ContainsKey(id))
        {
            return;
        }

        SpriteGraphic spriteGraphic            = _indexSpriteGraphic[id].SpriteGraphic;
        Mesh          mesh                     = _indexSpriteGraphic[id].Mesh;
        Dictionary <InlineText, MeshInfo> data = _textMeshInfo[id];
        List <Vector3> vertices                = new List <Vector3>();
        List <Vector2> uv        = new List <Vector2>();
        List <int>     triangles = new List <int>();

        foreach (var item in data)
        {
            if (item.Key == null)
            {
                continue;
            }

            for (int i = 0; i < item.Value.Vertices.Length; i++)
            {
                //添加顶点
                vertices.Add(item.Value.Vertices[i]);
                //添加uv
                uv.Add(item.Value.Uv[i]);
            }
            //添加顶点索引
            for (int i = 0; i < item.Value.Triangles.Length; i++)
            {
                triangles.Add(item.Value.Triangles[i]);
            }
        }
        //计算顶点绘制顺序
        for (int i = 0; i < triangles.Count; i++)
        {
            if (i % 6 == 0)
            {
                int num = i / 6;
                triangles[i + 0] = 0 + 4 * num;
                triangles[i + 1] = 1 + 4 * num;
                triangles[i + 2] = 2 + 4 * num;

                triangles[i + 3] = 0 + 4 * num;
                triangles[i + 4] = 2 + 4 * num;
                triangles[i + 5] = 3 + 4 * num;
            }
        }
        mesh.Clear();
        mesh.vertices  = vertices.ToArray();
        mesh.uv        = uv.ToArray();
        mesh.triangles = triangles.ToArray();

        spriteGraphic.canvasRenderer.SetMesh(mesh);
        spriteGraphic.UpdateMaterial();
    }
    void DrawSprite()
    {
        Mesh m_spriteMesh = new Mesh();

        List <Vector3> tempVertices  = new List <Vector3>();
        List <Vector2> tempUv        = new List <Vector2>();
        List <int>     tempTriangles = new List <int>();

        for (int i = 0; i < listSprite.Count; i++)
        {
            for (int j = 0; j < listSprite[i].vertices.Length; j++)
            {
                tempVertices.Add(listSprite[i].vertices[j]);
            }
            for (int j = 0; j < listSprite[i].uv.Length; j++)
            {
                tempUv.Add(listSprite[i].uv[j]);
            }
            for (int j = 0; j < listSprite[i].triangles.Length; j++)
            {
                tempTriangles.Add(listSprite[i].triangles[j]);
            }
        }

        for (int i = 0; i < tempTriangles.Count; i++)
        {
            if (i % 6 == 0)
            {
                int num = i / 6;
                tempTriangles[i]     = 0 + 4 * num;
                tempTriangles[i + 1] = 1 + 4 * num;
                tempTriangles[i + 2] = 2 + 4 * num;

                tempTriangles[i + 3] = 1 + 4 * num;
                tempTriangles[i + 4] = 0 + 4 * num;
                tempTriangles[i + 5] = 3 + 4 * num;
            }
        }

        m_spriteMesh.vertices  = tempVertices.ToArray();
        m_spriteMesh.uv        = tempUv.ToArray();
        m_spriteMesh.triangles = tempTriangles.ToArray();

        if (m_spriteCanvasRenderer == null)
        {
            m_spriteCanvasRenderer = m_spriteGraphic.GetComponent <CanvasRenderer>();
        }

        m_spriteCanvasRenderer.SetMesh(m_spriteMesh);
        m_spriteGraphic.UpdateMaterial();
    }