ProceduralImageInfo CalculateInfo() { var r = GetPixelAdjustedRect(); float pixelSize = 1f / Mathf.Max(0, falloffDistance); Vector4 radius = FixRadius(Modifier.CalculateRadius(r)); float minside = Mathf.Min(r.width, r.height); ProceduralImageInfo info = new ProceduralImageInfo(r.width + falloffDistance, r.height + falloffDistance, falloffDistance, pixelSize, radius / minside, borderWidth / minside * 2); return(info); }
ProceduralImageInfo CalculateInfo() { var r = GetPixelAdjustedRect(); Vector3[] corners = new Vector3[4]; rectTransform.GetWorldCorners(corners); float pixelSize = Vector3.Distance(corners[1], corners[2]) / r.width; pixelSize = pixelSize / Mathf.Max(0, falloffDistance); Vector4 radius = FixRadius(Modifier.CalculateRadius(r)); float minside = Mathf.Min(r.width, r.height); ProceduralImageInfo info = new ProceduralImageInfo(r.width + falloffDistance, r.height + falloffDistance, falloffDistance, pixelSize, radius / minside, borderWidth / minside * 2); return(info); }
void EncodeAllInfoIntoVertices(VertexHelper vh, ProceduralImageInfo info) { UIVertex vert = new UIVertex(); Vector2 uv1 = new Vector2(info.width, info.height); Vector2 uv2 = new Vector2(EncodeFloats_0_1_16_16(info.radius.x, info.radius.y), EncodeFloats_0_1_16_16(info.radius.z, info.radius.w)); Vector2 uv3 = new Vector2(info.borderWidth == 0 ? 1 : Mathf.Clamp01(info.borderWidth), info.pixelSize); for (int i = 0; i < vh.currentVertCount; i++) { vh.PopulateUIVertex(ref vert, i); vert.position += ((Vector3)vert.uv0 - new Vector3(0.5f, 0.5f)) * info.fallOffDistance; //vert.uv0 = vert.uv0; vert.uv1 = uv1; vert.uv2 = uv2; vert.uv3 = uv3; vh.SetUIVertex(vert, i); } }
void EncodeAllInfoIntoVertices(VertexHelper vh, ProceduralImageInfo info) { UIVertex vert = new UIVertex(); Vector2 uv1 = new Vector2(info.width, info.height); Vector2 uv2 = new Vector2(EncodeFloats_0_1_16_16(info.radius.x, info.radius.y), EncodeFloats_0_1_16_16(info.radius.z, info.radius.w)); Vector2 uv3 = new Vector2(info.borderWidth == 0 ? 1 : Mathf.Clamp01(info.borderWidth), info.pixelSize); // If you've come here you might find this useful (for certain parts of the UI). https://github.com/azixMcAze/Unity-UIGradient/blob/master/Assets/Scripts/UIGradient.cs for (int i = 0; i < vh.currentVertCount; i++) { vh.PopulateUIVertex(ref vert, i); vert.position += ((Vector3)vert.uv0 - new Vector3(0.5f, 0.5f)) * info.fallOffDistance; //vert.uv0 = vert.uv0; vert.uv1 = uv1; vert.uv2 = uv2; vert.uv3 = uv3; vh.SetUIVertex(vert, i); } }