/// Credit 00christian00 /// Sourced from - http://forum.unity3d.com/threads/any-way-to-show-part-of-an-image-without-using-mask.360085/#post-2332030 namespace UnityEngine.UI.Extensions { [AddComponentMenu("UI/Effects/Extensions/UIImageCrop")] [ExecuteInEditMode] [RequireComponent(typeof(RectTransform))] public class UIImageCrop : MonoBehaviour { MaskableGraphic mGraphic; Material mat; int XCropProperty, YCropProperty; public float XCrop = 0f; public float YCrop = 0f; // Use this for initialization void Start() { SetMaterial(); } public void SetMaterial() { mGraphic = this.GetComponent(); XCropProperty = Shader.PropertyToID("_XCrop"); YCropProperty = Shader.PropertyToID("_YCrop"); if (mGraphic != null) { if (mGraphic.material == null || mGraphic.material.name == "Default UI Material") { //Applying default material with UI Image Crop shader mGraphic.material = new Material(ShaderLibrary.GetShaderInstance("UI Extensions/UI Image Crop")); } mat = mGraphic.material; } else { Debug.LogError("Please attach component to a Graphical UI component"); } } public void OnValidate() { SetMaterial(); SetXCrop(XCrop); SetYCrop(YCrop); } /// /// Set the x crop factor, with x being a normalized value 0-1f. /// /// public void SetXCrop(float xcrop) { XCrop = Mathf.Clamp01(xcrop); mat.SetFloat(XCropProperty, XCrop); } /// /// Set the y crop factor, with y being a normalized value 0-1f. /// /// public void SetYCrop(float ycrop) { YCrop = Mathf.Clamp01(ycrop); mat.SetFloat(YCropProperty, YCrop); } } }