Unity AR 两指手势实现物体放大缩小功能

admin3年前unity基础API1216
using UnityEngine;
 
public class Zoom : MonoBehaviour
{
    //旧的触摸点位置
    Vector2 oldPos1;
    Vector2 oldPos2;
 
    // Start is called before the first frame update
    void Start()
    {
        
    }
 
    // Update is called once per frame
    void Update()
    {
        //判断触摸点的数量是否为两个
        if(Input.touchCount == 2)
        {
            //判断两个触摸点的状态是否为手指进行了移动
            if (Input.GetTouch(0).phase == TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)
            {
                //新的触摸点的位置
                Vector2 newPos1 = Input.GetTouch(0).position;
                Vector2 newPos2 = Input.GetTouch(1).position;
 
                //判断触摸的手势是否为放大
                if(isEnLarge (oldPos1,oldPos2,newPos1,newPos2))
                {
                    //获取transform组件缩放属性x轴数值
                    float oldScale = transform.localScale.x;
                    //新的数值为旧的数值放大1.025倍
                    float newScale = oldScale * 1.025f;
 
                    //将新的值赋给transform组件缩放属性
                    transform.localScale = new Vector3(newScale, newScale, newScale);
                }
                else  //如果触摸手势为缩小,同理缩小1.025倍
                {
                    float oldScale = transform.localScale.x;
                    float newScale = oldScale / 1.025f;
 
                    transform.localScale = new Vector3(newScale, newScale, newScale);
                }
 
                //新的位置覆盖旧的位置
                oldPos1 = newPos1;
                oldPos2 = newPos2;
            }
        }
    }
 
    //判断手势是否为放大手势
    bool isEnLarge(Vector2 oldP1, Vector2 oldP2,Vector2 newP1,Vector2 newP2)
    {
        //计算旧两点间的距离与新两点间的距离
        float oldLength = Mathf.Sqrt((oldP1.x - oldP2.x) * (oldP1.x - oldP2.x) + (oldP1.y - oldP2.y) * (oldP1.y - oldP2.y));
        float newLength = Mathf.Sqrt((newP1.x - newP2.x) * (newP1.x - newP2.x) + (newP1.y - newP2.y) * (newP1.y - newP2.y));
 
        //判断旧两点间的距离与新两点间的距离大小,如果旧的距离小于新的距离,说明是放大手势
        if (oldLength < newLength)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}


相关文章

Unity给UI元素物体添加操作响应事件

可以给自定义物体如图片等添加响应事件引入命名空间using UnityEngine.EventSystems;类中继承接口IPointerDownHandler实现接口  ...

Unity 读取Asset目录下物体

读取方法:AssetDatabase.LoadAssetAtPath使用方法path = "Assets/CustomizableAnimeGirl/Models/Mat...

Unity使用input system制作一个摇杆控制物体移动

Unity使用input system制作一个摇杆控制物体移动

1:首先使用UI做个摇杆的模型 两个图片嵌套,外侧是边界,中间图片是摇杆2:使用inputSYSTEM创建事件3:玩家物体上绑定脚本using System.Collections...

相机跟随角色移动镜头缩放方法

这种方法最简单可以实现相机跟随角色平移1:计算相机和目标物体的距离  offset = this.transform.position - ...

Unity 手机触摸Touch事件

1:判断是否触摸如果大于0那就是最少一个手指触摸了屏幕 以此类推 如果=2就是2个手指 最多10个if(Input.touchCount >0)2:判断单...

unity 新的输入系统input system 使用

unity 新的输入系统input system 使用

1:首先在包管理器里安装 搜索"input system"2: 创建input acionts3:生成代码  勾选后点击右小角应用就可以自动生成相关代...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。