Unity UGUI 效果 之 鼠标拖拽UI实现放大缩小,实时调整UI大小
文章目录
前言
Unity UGUI 效果 之 鼠标拖拽UI实现放大缩小,实时调整UI大小(上)
上一篇我们设置的UI的拖拽功能,这一篇我们通过对UI的anchoredPosition和sizeDelta的设置实现单方向的放大缩小功能。
一、实现原理
1、默认设置
2、改变时状态
当改变图片的大小时,Unity会对图片进行整体的缩放,如果要在视觉上保持单方向变化,需在改变图片的宽高时同时改变位置坐标,满足单方向缩放的效果。
当宽度从600—》800时变化状态
二、实现代码
1、图片位置大小控制代码
/*
*FileName: KeepFixed.cs
*Author: SSW
*Date: 2024/08/02 08:52:07
*UnityVersion: 2020.3.40f1
*Description:
*/
using SSWTools;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class KeepFixed : MonoBehaviour
{
[SerializeField]
private UI_Edge uI_Edge;
RectTransform panelRectTransform;
/// <summary>
/// 位置
/// </summary>
private Vector2 originalLocalPointerPosition;
/// <summary>
/// 大小
/// </summary>
private Vector2 originalSizeDelta;
// Start is called before the first frame update
void Start()
{
panelRectTransform=this.GetComponent<RectTransform>();
originalLocalPointerPosition=panelRectTransform.anchoredPosition;
originalSizeDelta = panelRectTransform.sizeDelta;
}
/// <summary>
/// 通过传入缩放的方向和大小,动态改变图片的位置和大小
/// </summary>
/// <param name="pEdge"></param>
/// <param name="v2"></param>
public void SetPanelFixed(UI_Edge pEdge,Vector2 v2)
{
uI_Edge=pEdge;
switch (pEdge)
{
case UI_Edge.None:
break;
case UI_Edge.Top:
originalLocalPointerPosition = panelRectTransform.anchoredPosition;
originalSizeDelta = panelRectTransform.sizeDelta;
if (v2.y> originalSizeDelta.y)
{
panelRectTransform.sizeDelta = v2;
originalLocalPointerPosition.y += ((v2.y - originalSizeDelta.y) / 2);
panelRectTransform.anchoredPosition = originalLocalPointerPosition;
}
else if (v2.y< originalSizeDelta.y)
{
panelRectTransform.sizeDelta = v2;
originalLocalPointerPosition.y -= ((originalSizeDelta.y - v2.y) / 2);
panelRectTransform.anchoredPosition = originalLocalPointerPosition;
}
else
{
// Debug.Log("达到 最大值");
}
break;
case UI_Edge.Down:
originalLocalPointerPosition = panelRectTransform.anchoredPosition;
originalSizeDelta = panelRectTransform.sizeDelta;
if (v2.y > originalSizeDelta.y)
{
panelRectTransform.sizeDelta = v2;
originalLocalPointerPosition.y -= ((v2.y - originalSizeDelta.y) / 2);
panelRectTransform.anchoredPosition = originalLocalPointerPosition;
}
else if (v2.y < originalSizeDelta.y)
{
panelRectTransform.sizeDelta = v2;
originalLocalPointerPosition.y += ((originalSizeDelta.y - v2.y) / 2);
panelRectTransform.anchoredPosition = originalLocalPointerPosition;
}
else
{
// Debug.Log("达到 最大值");
}
break;
case UI_Edge.Left:
originalLocalPointerPosition = panelRectTransform.anchoredPosition;
originalSizeDelta = panelRectTransform.sizeDelta;
if ( v2