| | |
| | | using UnityEngine.UI; |
| | | using UnityEngine.Sprites; |
| | | |
| | | public class TextImage : TextEx |
| | | 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); |
| | | } |
| | | |
| | | 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);
|
| | | }
|
| | |
|
| | | } |
| | | |
| | | |