Unity 手势缩放UI

来源:互联网 发布:金仕达期货交易软件 编辑:程序博客网 时间:2024/06/05 17:17

今天,我们来实现手势缩放图片。
不需要太复杂的场景,只需要新建一个 Image,
这里写图片描述

然后给摄像机添加一个名为 TouchTest 的脚本,然后编辑它

using UnityEngine;using UnityEngine.UI;using System.Collections;public class TouchTest : MonoBehaviour {    /// <summary>    /// 上一帧两指间距离    /// </summary>    private float lastDistance = 0;    /// <summary>    /// 当前两个手指之间的距离    /// </summary>    private float twoTouchDistance = 0;    /// <summary>    /// 得到图片    /// </summary>    public RectTransform image;    /// <summary>    /// 第一根手指按下的坐标    /// </summary>    Vector2 firstTouch = Vector3.zero;    /// <summary>    /// 第二根手指按下的坐标    /// </summary>    Vector2 secondTouch = Vector3.zero;    /// <summary>    /// 是否有两只手指按下    /// </summary>    private bool isTwoTouch = false;    // Use this for initialization    void Start () {    }    // Update is called once per frame    void Update () {        //如果有两个及以上的手指按下        if (Input.touchCount > 1)        {            //当第二根手指按下的时候            if (Input.GetTouch(1).phase == TouchPhase.Began)            {                isTwoTouch = true;                //获取第一根手指的位置                firstTouch = Input.touches[0].position;                //获取第二根手指的位置                secondTouch = Input.touches[1].position;                lastDistance = Vector2.Distance(firstTouch, secondTouch);            }            //如果有两根手指按下            if (isTwoTouch)            {                //每一帧都得到两个手指的坐标以及距离                firstTouch = Input.touches[0].position;                secondTouch = Input.touches[1].position;                twoTouchDistance = Vector2.Distance(firstTouch, secondTouch);                //当前图片的缩放                Vector3 curImageScale = new Vector3(image.localScale.x, image.localScale.y, 1);                //两根手指上一帧和这帧之间的距离差                //因为100个像素代表单位1,把距离差除以100看缩放几倍                float changeScaleDistance = (twoTouchDistance - lastDistance) / 100;                //因为缩放 Scale 是一个Vector3,所以这个代表缩放的Vector3的值就是缩放的倍数                Vector3 changeScale = new Vector3(changeScaleDistance, changeScaleDistance, 0);                //图片的缩放等于当前的缩放加上 修改的缩放                image.localScale = curImageScale + changeScale;                //控制缩放级别                image.localScale = new Vector3(Mathf.Clamp(image.localScale.x, 0.5f, 10f), Mathf.Clamp(image.localScale.y, 0.5f, 10f), 1);                //这一帧结束后,当前的距离就会变成上一帧的距离了                lastDistance = twoTouchDistance;            }            //当第二根手指结束时(抬起)            if (Input.GetTouch(1).phase == TouchPhase.Ended)            {                isTwoTouch = false;                firstTouch = Vector3.zero;                secondTouch = Vector3.zero;            }        }    }}

具体的看代码吧。现在运行程序,在手机上通过两根手指,就能缩放图片了。注意缩放级别根据自己的手机大小来定。
如果不会打包到安卓的可以看我的这两篇博客
Android Studio 2.1 和 Unity3D 5.3.4 交互

Android Studio 2.1 和 Unity3D 5.3.4 交互(二)

0 0