Ugui 实现拖拽图片缩放尺寸

本文介绍了一种在Unity中实现图片缩放控制的方法,通过创建一个作为子物体的右下角图片,并挂载功能脚本来实现拖动控制图片大小的功能。文章详细解释了脚本的实现原理和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

如果想通过拖动图片的右下角控制图片的缩放,那么需要在目标图片的右下角创建一个图片并作为目标图片的子物体,然后把右下角图片的锚点设置为右下角对齐,最后把功能脚本挂载在右下角图片的物体上,通过拖动它控制目标图片缩放尺寸,如下图:

脚本如下:


using UnityEngine;
using UnityEngine.EventSystems;

/// <summary>
/// 中心点
/// </summary>
public enum PivotType
{
    leftTop=0,
    center,
    rightBottom,
    
}
public class ImageResizer : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IDragHandler
{
    public float minRatio; //最小缩放尺寸与原尺寸比
    public float maxRatio; //最大缩放尺寸与原尺寸比
    private Vector2 orignSize; //缓存原始尺寸
    public RectTransform targetRect; //被控制的 图片 
    [SerializeField]
    private Texture2D cursorHandle; //鼠标


    public PivotType pivotType;

    void Awake()
    {
        
        orignSize = targetRect.sizeDelta;
        SetPivot(pivotType);
    }

    #region  Function Deal with size


    void SetPivot(PivotType pivotType)
    {
        switch (pivotType)
        {
            case PivotType.leftTop:
                targetRect.pivot = new Vector2(0, 1);
                break;

            case PivotType.center:
                targetRect.pivot = new Vector2(0.5f, 0.5f);

                break;
            case PivotType.rightBottom:
                targetRect.pivot = new Vector2(1, 0);
                break;
        }

    }

    void IDragHandler.OnDrag(PointerEventData eventData)
    {
        float x = Mathf.Clamp(targetRect.sizeDelta.x + eventData.delta.x, orignSize.x * minRatio, orignSize.x * maxRatio);
        //float y = Mathf.Clamp(targetRect.sizeDelta.y - eventData.delta.y, orignSize.y*min, orignSize.y*max); 
        float y = x / targetRect.sizeDelta.x * targetRect.sizeDelta.y; //等比缩放
        targetRect.sizeDelta = new Vector2(x, y);
    }
    // 重置Target 尺寸
    public void ResetSize()
    {
        targetRect.sizeDelta = orignSize;
    }
    #endregion
    #region Cursor Behaviours
    public void OnPointerEnter(PointerEventData eventData)
    {
        Cursor.SetCursor(cursorHandle, Vector2.zero, CursorMode.Auto);
    }
    public void OnPointerExit(PointerEventData eventData)
    {
        SetDefaultCursor();
    }
    private static void SetDefaultCursor()
    {
        Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
    }
    private void OnDisable()
    {
        SetDefaultCursor();
    }
    private void OnDestroy()
    {
        SetDefaultCursor();
    }
    #endregion
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值