Unity双指等比例缩放图片,修改RectTransom属性

 先上代码    ↓↓↓

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScaleByTwoFinger : MonoBehaviour
{
    private RectTransform targetT;
    bool isInit;
    Vector2 touch1, touch2, oriPos, pos;
    float  disX, disY;
    float scale , oriScale;
    public float scaleSpeed = 1;

    public bool isLimitScale;
    public float min, max;
    private void Start()
    {
        targetT = GameObject.Find("Video").GetComponent<RectTransform>();
    }
    private void Update()
    {
        //不是双指就关闭
        if (Input.touchCount != 2)
        {
            isInit = false;
        }

        //初始化
        if (Input.touchCount == 2 && !isInit)
        {
            //两指点位
            touch1 = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
            touch2 = Camera.main.ScreenToWorldPoint(Input.GetTouch(1).position);

            //目标初始点位
            oriPos = new Vector3(targetT.position.x, targetT.position.y, 0);

            //两指中点
            pos = new Vector3((Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position).x + Camera.main.ScreenToWorldPoint(Input.GetTouch(1).position).x) / 2, (Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position).y + Camera.main.ScreenToWorldPoint(Input.GetTouch(1).position).y) / 2, 0);

            //两指中点和目标距离
            disX = pos.x - oriPos.x;
            disY = pos.y - oriPos.y;
            oriScale = targetT.localScale.x;


            isInit = true;
        }

        if (Input.touchCount == 2)
        {
            //两指缩放比例
            scale = Vector2.Distance(Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position), Camera.main.ScreenToWorldPoint(Input.GetTouch(1).position)) / Vector2.Distance(touch1, touch2);

            //利用scaleSpeed控制缩放速度
            scale = (scale - 1) * scaleSpeed;

            //给缩放比例加限制
            if (isLimitScale && targetT.localScale.x <= min && scale < 0)
            {
                return;
            }
                
            if (isLimitScale && targetT.localScale.x >= max && scale > 0)
            {
                return;
            }
                


            //缩放目标大小
            targetT.localScale = new Vector2(oriScale + scale*0.01f, oriScale + scale* 0.01f);
            //改变目标位置,让位置保持不变
            targetT.position = new Vector2(oriPos.x - ((targetT.localScale.x - oriScale) * disX), oriPos.y - ((targetT.localScale.y - oriScale) * disY));
        }
    }
}

代码是搬运大佬“我寄人间雪满头丶”的文章进行修改的,如果需要照搬使用的话,记得把以下的第18代码进行更改,把Video改成你自己对应的图片名称(我这里叫Video是因为挂了个视频播放器在上面,可以实现视频双指缩放,看你自己的需求吧!)

targetT = GameObject.Find("Video").GetComponent<RectTransform>();

如果双指缩放的速度太快或者太慢,是因为canvas的大小不同导致的,自己可以微调一下第72行代码。(把0.01f进行修改,控制你的缩放速度,别问为什么不直接改scale,这样对我来说方便些哈哈哈哈!)

targetT.localScale = new Vector2(oriScale + scale*0.01f, oriScale + scale* 0.01f);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值