Skip to content

Instantly share code, notes, and snippets.

@Tunied
Created October 20, 2018 07:02
Show Gist options
  • Save Tunied/a38d58756b7815ab7fd2e5daf24276d5 to your computer and use it in GitHub Desktop.
Save Tunied/a38d58756b7815ab7fd2e5daf24276d5 to your computer and use it in GitHub Desktop.
unity : use tight sprite atlas in canvas as image
using UnityEngine;
using UnityEngine.UI;
public class TightImage : Image
{
private RectTransform mRect;
private RectTransform RectTransform
{
get
{
if (mRect == null)
{
mRect = GetComponent<RectTransform>();
}
return mRect;
}
}
protected override void OnPopulateMesh(VertexHelper toFill)
{
if (type == Type.Simple)
{
toFill.Clear();
DoPopulateSimpleImage(toFill);
}
else
{
base.OnPopulateMesh(toFill);
}
}
private void DoPopulateSimpleImage(VertexHelper toFill)
{
var spColor = color;
var r = GetPixelAdjustedRect();
var bounds = overrideSprite.bounds;
var scaleX = r.width / bounds.size.x;
var scaleY = r.height / bounds.size.y;
if (preserveAspect)
{
var minScale = Mathf.Min(scaleX, scaleY);
scaleX = scaleY = minScale;
}
var offsetImgX = RectTransform.rect.center.x;
var offsetImgY = RectTransform.rect.center.y;
var offsetSpX = -scaleX * bounds.center.x;
var offsetSpY = -scaleY * bounds.center.y;
for (var i = 0; i < overrideSprite.vertices.Length; i++)
{
var x = overrideSprite.vertices[i].x * scaleX + offsetImgX + offsetSpX;
var y = overrideSprite.vertices[i].y * scaleY + offsetImgY + offsetSpY;
toFill.AddVert(new Vector3(x, y, 0), spColor, overrideSprite.uv[i]);
}
var triangles = overrideSprite.triangles;
for (var i = 0; i < triangles.Length; i += 3)
{
toFill.AddTriangle(triangles[i], triangles[i + 1], triangles[i + 2]);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment