| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEngine.UI; | 
| using UnityEngine.Sprites; | 
|   | 
| public class TextImage : TextEx | 
| { | 
|     [SerializeField] Sprite m_Sprite; | 
|   | 
|     public Sprite sprite { | 
|         get { return m_Sprite; } | 
|         set { | 
|             m_Sprite = value; | 
|             SetVerticesDirty(); | 
|         } | 
|     } | 
|   | 
|     protected override void Awake() | 
|     { | 
|         base.Awake(); | 
|         base.font = FontUtility.preferred; | 
|         // base.material = MaterialUtility.hudMaterial; | 
|   | 
|         if (sprite != null) | 
|         { | 
|             base.material.SetTexture("_Tex2", sprite.texture); | 
|         } | 
|     } | 
|   | 
|     protected override void OnPopulateMesh(VertexHelper vh) | 
|     { | 
|         if (sprite != null) | 
|         { | 
|             vh.Clear(); | 
|         } | 
|   | 
|         base.OnPopulateMesh(vh); | 
|   | 
|         if (sprite != null) | 
|         { | 
|             var size = new Vector2(rectTransform.rect.width, rectTransform.rect.height); | 
|             var positions = new Vector3[4]; | 
|             var uvs = new Vector2[4]; | 
|   | 
|             var uv = sprite != null ? DataUtility.GetOuterUV(sprite) : Vector4.zero; | 
|             var width = rectTransform.rect.width; | 
|             var height = rectTransform.rect.height; | 
|   | 
|             var uvCenterX = (uv.x + uv.z) * 0.5f; | 
|             var uvCenterY = (uv.y + uv.w) * 0.5f; | 
|             var uvScaleX = (uv.z - uv.x) / width; | 
|             var uvScaleY = (uv.w - uv.y) / height; | 
|   | 
|             var position = positions[0] = new Vector2(-size.x * 0.5f, -size.y * 0.5f); | 
|             uvs[0] = new Vector2(position.x * uvScaleX + uvCenterX, position.y * uvScaleY + uvCenterY); | 
|   | 
|             position = positions[1] = new Vector2(size.x * 0.5f, -size.y * 0.5f); | 
|             uvs[1] = new Vector2(position.x * uvScaleX + uvCenterX, position.y * uvScaleY + uvCenterY); | 
|   | 
|             position = positions[2] = new Vector2(size.x * 0.5f, size.y * 0.5f); | 
|             uvs[2] = new Vector2(position.x * uvScaleX + uvCenterX, position.y * uvScaleY + uvCenterY); | 
|   | 
|             position = positions[3] = new Vector2(-size.x * 0.5f, size.y * 0.5f); | 
|             uvs[3] = new Vector2(position.x * uvScaleX + uvCenterX, position.y * uvScaleY + uvCenterY); | 
|   | 
|             for (var i = 0; i < 4; i++) | 
|             { | 
|                 vh.AddVert(positions[i], color, uvs[i], uvs[i], new Vector3(1, 0, -1), new Vector4(1, 0, 0, -1)); | 
|             } | 
|   | 
|             vh.AddTriangle(0, 1, 2); | 
|             vh.AddTriangle(2, 3, 0); | 
|         } | 
|   | 
|     } | 
|   | 
|   | 
|   | 
| } |