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