Skip to content

Instantly share code, notes, and snippets.

@rumaniel
Created November 11, 2025 05:16
Show Gist options
  • Select an option

  • Save rumaniel/642178fcf7ecc6cdbb8ad4e2e78b96ae to your computer and use it in GitHub Desktop.

Select an option

Save rumaniel/642178fcf7ecc6cdbb8ad4e2e78b96ae to your computer and use it in GitHub Desktop.
Skewed Image
using UnityEngine;
using UnityEngine.UI;
public class SkewedImage : Image
{
public Vector2 SkewVector;
protected override void OnPopulateMesh(VertexHelper vh)
{
base.OnPopulateMesh(vh);
var r = GetPixelAdjustedRect();
var v = new Vector4(r.x, r.y, r.x + r.width, r.y + r.height);
Color32 color32 = color;
vh.Clear();
var size = new Vector2(Mathf.Abs(SkewVector.x), Mathf.Abs(SkewVector.y));
var factor = Mathf.Approximately((SkewVector.x * SkewVector.y), 0) ? 0 : (SkewVector.x * SkewVector.y) / Mathf.Abs(SkewVector.x * SkewVector.y);
vh.AddVert(new Vector3(v.x - factor * size.x + SkewVector.x, v.y - factor * size.y + SkewVector.y), color32, new Vector2(0f, 0f));
vh.AddVert(new Vector3(v.x + factor * size.x + SkewVector.x, v.w - factor * size.y + SkewVector.y), color32, new Vector2(0f, 1f));
vh.AddVert(new Vector3(v.z + factor * size.x + SkewVector.x, v.w + factor * size.y + SkewVector.y), color32, new Vector2(1f, 1f));
vh.AddVert(new Vector3(v.z - factor * size.x + SkewVector.x, v.y + factor * size.y + SkewVector.y), color32, new Vector2(1f, 0f));
vh.AddTriangle(0, 1, 2);
vh.AddTriangle(2, 3, 0);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment