unity 鼠标拖动UI 滚轮缩放大小

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/// <summary>
/// 鼠标拖动UI  滚轮缩放大小
/// </summary>

public class PageDragToZoom : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler, IBeginDragHandler, IDragHandler
{
    /// <summary>
    /// 缩放速度
    /// </summary>
    private float wheelSpeed = 0.1f;
    /// <summary>
    /// 是否缩放(鼠标进入退出 判断)
    /// </summary>
    public bool isTrue;

    Vector3 _originScale;//初始大小
    Vector3 _originPoint;//初始位置
    public Button _closeButton;//复位

    Vector3 offPos;
    Vector3 arragedPos;

    //Vector3 _scaleOne;
    //public Transform _ThisTransform;
    void Start()
    {
        _originPoint = this.transform.position;
        _originScale = this.transform.localScale;
        _closeButton.onClick.AddListener(CloseImage);
        //_scaleOne = transform.localScale;
    }
    
    void Update()
    {
        //UI最大可以放到两倍
        if (transform.localScale.x >= 2 || transform.localScale.x >= 2)
        {
            transform.localScale = new Vector3(2, 2, 2);
        }
        //UI最小可以缩小两倍
        if (transform.localScale.x <= 0.2f || transform.localScale.x <= 0.2f)
        {
            transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
        }
        //通过鼠标滚轮键来对照片进行缩放
        if (isTrue == true)
        {
            // Debug.Log("通过鼠标滚轮键来对照片进行缩放");
            transform.localScale += new Vector3(Input.mouseScrollDelta.y * wheelSpeed, Input.mouseScrollDelta.y * wheelSpeed, Input.mouseScrollDelta.y * wheelSpeed);
        }
    }
    /// <summary>
    /// 回到初始状态
    /// </summary>
    private void CloseImage()
    {
        this.transform.position = _originPoint;
        this.transform.localScale = _originScale;

    }
    /// <summary>
    /// 鼠标进入
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerEnter(PointerEventData eventData)
    {
        isTrue = true;
    }
    /// <summary>
    /// 鼠标退出
    /// </summary>
    /// <param name="eventData"></param>
    public void OnPointerExit(PointerEventData eventData)
    {
        isTrue = false;
    }


    
    /// <summary>
    /// 开始拖拽的时候
    /// </summary>
    /// <param name="eventData"></param>
    public void OnBeginDrag(PointerEventData eventData)
    {
        if (RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.GetComponent<RectTransform>(), Input.mousePosition
     , eventData.enterEventCamera, out arragedPos))
        {
            offPos = transform.position - arragedPos;
        }
    }
    /// <summary>
    /// 拖拽中
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrag(PointerEventData eventData)
    {
        transform.position = offPos + Input.mousePosition;

    }


}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity中实现鼠标滑轮放大缩小图片,可以通过以下步骤实现: 1. 创建一个Image对象,并将其添加到Canvas中。 2. 给Image对象添加一个Rect Transform组件,用于控制图片的位置和大小。 3. 给Image对象添加一个Event Trigger组件,并添加两个事件:OnScroll和OnDrag。 4. 在OnScroll事件中,使用鼠标滑轮的delta值来缩放图片的大小。可以使用RectTransform组件的localScale属性来实现缩放。 5. 在OnDrag事件中,使用鼠标的delta值来移动图片的位置。可以使用RectTransform组件的anchoredPosition属性来实现移动。 下面是一个示例代码: ``` using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class ImageController : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IDragHandler, IScrollHandler { public Image image; public float zoomSpeed = 0.1f; public float moveSpeed = 1.0f; private bool isDragging = false; private Vector2 dragStartPosition; public void OnPointerEnter(PointerEventData eventData) { // 鼠标进入图片区域时,允许滑动和缩放图片 image.rectTransform.pivot = new Vector2(0.5f, 0.5f); image.rectTransform.localScale = Vector3.one; image.rectTransform.localPosition = Vector3.zero; } public void OnPointerExit(PointerEventData eventData) { // 鼠标离开图片区域时,还原图片位置和大小 image.rectTransform.pivot = new Vector2(0f, 1f); image.rectTransform.localScale = Vector3.one; image.rectTransform.localPosition = Vector3.zero; } public void OnDrag(PointerEventData eventData) { // 鼠标左键按住拖动时,移动图片位置 if (Input.GetMouseButton(0)) { if (!isDragging) { isDragging = true; dragStartPosition = eventData.position; } else { Vector2 delta = eventData.position - dragStartPosition; image.rectTransform.anchoredPosition += delta * moveSpeed; dragStartPosition = eventData.position; } } else { isDragging = false; } } public void OnScroll(PointerEventData eventData) { // 使用鼠标滚轮缩放图片大小 float scale = 1.0f + eventData.scrollDelta.y * zoomSpeed; image.rectTransform.localScale *= scale; } } ``` 将这个脚本组件添加到Image对象上,然后将Image对象的Image组件和RectTransform组件赋值给对应的变量,即可实现鼠标滑轮放大缩小图片,鼠标左键按住滑动拖动图片的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野区捕龙为宠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值