• UGUI:窗口限制以及窗口缩放


    版权申明:

    • 本文原创首发于以下网站:
    1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
    2. 优梦创客的官方博客:https://91make.top
    3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
    4. 『优梦创客』的微信公众号:umaketop
    • 您可以自由转载,但必须加入完整的版权声明

    窗口拖动限制在一个特定的区域

    public class Scene : MonoBehaviour, IDragHandler, IPointerDownHandler
    {
        public RectTransform RtTransform;
        public RectTransform RTParent;
        Vector2 downpos;
        Vector2 newpos;
        public void OnPointerDown(PointerEventData eventData)
        {
           RectTransformUtility.ScreenPointToLocalPointInRectangle
           (RtTransform, eventData.position
           ,eventData.pressEventCamera, out downpos);
            //print(downpos);
        }
        
        public void OnDrag(PointerEventData eventData)
        {
            if (RectTransformUtility.ScreenPointToLocalPointInRectangle
             (RtTransform, eventData.position
             , eventData.pressEventCamera, out newpos))
            {
               
                Vector2 offset = newpos - downpos;
                transform.parent.position = (Vector2)transform.parent.position + offset;
                downpos = newpos;
            }
    
            if (RTParent.position.x < 0)
            {
                Vector2 tmp = RTParent.position;
                tmp.x = 0;
                RTParent.position = tmp;
            }
            else if (RTParent.position.x > RtTransform.rect.width - RTParent.rect.width)
            {
                Vector2 tmp = RTParent.position;
                tmp.x = RtTransform.rect.width - RTParent.rect.width;
                RTParent.position = tmp;
            }
    
            if (RTParent.position.y < 0)
            {
                Vector2 tmp = RTParent.position;
                tmp.y = 0;
                RTParent.position = tmp;
            }
            else if (RTParent.position.y > RtTransform.rect.height - RTParent.rect.height)
            {
                Vector2 tmp = RTParent.position;
                tmp.y = RtTransform.rect.height - RTParent.rect.height;
                RTParent.position = tmp;
            }
    
        }
    
    

    窗口缩放

    public class Zoom : MonoBehaviour,IPointerDownHandler,IDragHandler   
    {
        public RectTransform canvasWindow;
        public RectTransform parentWinfow;
        Vector2 downpos;
        Vector2 newpos;
        Vector2 origsize;
    
        public void OnPointerDown(PointerEventData eventData)
        {
            origsize = parentWinfow.sizeDelta;
            RectTransformUtility.ScreenPointToLocalPointInRectangle
            (canvasWindow, eventData.position, eventData.pressEventCamera, out downpos);
        }
    
        public void OnDrag(PointerEventData eventData)
        {
    
            if (RectTransformUtility.ScreenPointToLocalPointInRectangle
               (canvasWindow, eventData.position, eventData.pressEventCamera, out newpos))
            {
                Vector2 offpos=newpos-downpos;
               // offpos.y *= -1;
                parentWinfow.sizeDelta =origsize + offpos;        
            }
        }
    }
    
  • 相关阅读:
    进程间的通信如何实现?
    试解释操作系统原理中的作业、进程、线程、管程各自的定义。
    字符数组和strcpy
    字符串转化成整数
    整数字符串转化
    海量数据/日志检索问题
    哈夫曼编码问题
    Trie树,又称单词查找树、字典
    初识面向对象
    序列化 json pickle shelve configparser
  • 原文地址:https://www.cnblogs.com/raymondking123/p/11554875.html
Copyright © 2020-2023  润新知