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>(); }
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; } }
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; } }
/// <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(); }
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) } }
/// <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(); }