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 Awake()
    {
        m_text          = GetComponent <Text>();
        m_spriteGraphic = transform.GetComponentInChildren <SpriteGraphic>();
        //  m_spriteCanvasRenderer = m_spriteGraphic.GetComponent<CanvasRenderer>();

        m_textGenerator = m_text.cachedTextGeneratorForLayout;
        m_textSetting   = m_text.GetGenerationSettings(Vector2.zero);

        listSprite = new List <InlineSpriteInfor>();
    }
Example #4
0
    private void DrawSpriteAnimation()
    {
        _animationTime += Time.deltaTime * _AnimationSpeed;
        if (_animationTime >= 1.0f)
        {
            _AnimationIndex++;
            //绘制表情
            foreach (var item in _IndexSpriteGraphic)
            {
                if (item.Value._SpriteGraphic.m_spriteAsset._IsStatic)
                {
                    continue;
                }
                if (!_TextMeshInfo.ContainsKey(item.Key) || _TextMeshInfo[item.Key].Count <= 0)
                {
                    continue;
                }
                SpriteGraphic _spriteGraphic = _IndexSpriteGraphic[item.Key]._SpriteGraphic;
                //Mesh _mesh = _IndexSpriteGraphic[item.Key]._Mesh;
                Dictionary <InlineText, MeshInfo> _data = _TextMeshInfo[item.Key];
                foreach (var item02 in _data)
                {
                    for (int i = 0; i < item02.Value._Tag.Length; i++)
                    {
                        List <SpriteInfor> _listSpriteInfo = _IndexSpriteInfo[item.Key][item02.Value._Tag[i]].listSpriteInfor;
                        if (_listSpriteInfo.Count <= 1)
                        {
                            continue;
                        }
                        int _index = _AnimationIndex % _listSpriteInfo.Count;

                        int m = i * 4;
                        item02.Value._UV[m + 0] = _listSpriteInfo[_index].uv[0];
                        item02.Value._UV[m + 1] = _listSpriteInfo[_index].uv[1];
                        item02.Value._UV[m + 2] = _listSpriteInfo[_index].uv[2];
                        item02.Value._UV[m + 3] = _listSpriteInfo[_index].uv[3];
                    }
                }
                // _IndexSpriteGraphic[item.Key]._Mesh = _mesh;
                DrawSprites(item.Key);
            }

            _animationTime = 0.0f;
        }
    }
Example #5
0
    private void checkComponent()
    {
        if (m_spriteGraphic == null)
        {
            m_spriteGraphic = GetComponentInChildren <SpriteGraphic>(true);
            if (m_spriteGraphic == null)
            {
                GameObject obj = new GameObject("Image", typeof(SpriteGraphic));
                obj.transform.SetParent(this.transform);
                obj.transform.localScale    = Vector3.one;
                obj.transform.localPosition = Vector3.zero;
                m_spriteGraphic             = obj.GetComponent <SpriteGraphic>();
            }
            else
            {
                m_spriteGraphic.gameObject.SetActive(true);
            }
            //m_spriteGraphic.gameObject.SetActive(false);
        }

        if (m_spriteCanvasRenderer == null)
        {
            m_spriteCanvasRenderer = m_spriteGraphic.GetComponentInChildren <CanvasRenderer>();
            if (m_spriteMesh == null)
            {
                m_spriteMesh = new Mesh();
            }
            else
            {
                m_spriteMesh.Clear();
            }
            m_spriteCanvasRenderer.SetMesh(m_spriteMesh);
            m_spriteGraphic.UpdateMaterial();
        }

        if (m_spriteGraphic != null)
        {
            m_spriteAsset = m_spriteGraphic.m_spriteAsset;
        }
    }
Example #6
0
    /// <summary>
    /// 初始化
    /// </summary>
    protected override void OnEnable()
    {
        //在编辑器中,可能在最开始会出现一张图片,就是因为没有激活文本,在运行中是正常的。可根据需求在编辑器中选择激活...
        base.OnEnable();
        //对齐几何
        alignByGeometry = true;
        if (m_spriteGraphic == null)
        {
            m_spriteGraphic = GetComponentInChildren <SpriteGraphic>();
        }
        if (m_spriteCanvasRenderer == null)
        {
            m_spriteCanvasRenderer = m_spriteGraphic.GetComponentInChildren <CanvasRenderer>();
        }
        if (m_spriteGraphic != null)
        {
            m_spriteAsset = m_spriteGraphic.m_spriteAsset;
        }

        //启动的是 更新顶点
        SetVerticesDirty();
    }
Example #7
0
    private bool haveDynamicEmoji = false; //文本中是否有动图

    /// <summary>
    /// 初始化
    /// </summary>
    protected override void OnEnable()
    {
        //在编辑器中,可能在最开始会出现一张图片,就是因为没有激活文本,在运行中是正常的。可根据需求在编辑器中选择激活...
        base.OnEnable();

        if (m_spriteGraphic == null)
        {
            m_spriteGraphic = GetComponentInChildren <SpriteGraphic>();
        }
        if (null != m_spriteGraphic)
        {
            if (m_spriteCanvasRenderer == null)
            {
                m_spriteCanvasRenderer = m_spriteGraphic.GetComponentInChildren <CanvasRenderer>();
            }
            m_spriteAsset = m_spriteGraphic.m_spriteAsset;
        }
        else
        {
            usePic = false;  //(优化1)
        }
    }
Example #8
0
    /// <summary>
    /// 初始化
    /// </summary>
    protected override void OnEnable()
    {
        //在编辑器中,可能在最开始会出现一张图片,就是因为没有激活文本,在运行中是正常的。可根据需求在编辑器中选择激活...
        base.OnEnable();
        //对齐几何
        alignByGeometry = true;

        #region 为了将SpriteGraphicManager显示到最上级,这里的SpriteGraphicManager可能会放在最下面,所以需要从全局去找
        if (m_SGManager == null)
        {
            m_SGManager = GameObject.FindObjectOfType <SpriteGraphicManager>();
        }
        #endregion

        if (m_SGManager != null)
        {
            m_spriteGraphic        = m_SGManager.GetComponent <SpriteGraphic>();
            m_spriteCanvasRenderer = m_SGManager.GetComponent <CanvasRenderer>();
            m_spriteAsset          = m_spriteGraphic.m_spriteAsset;
        }

        //初始化 调用顶点绘制
        SetVerticesDirty();
    }