欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

unity中触摸改变物体的移动缩放

程序员文章站 2022-06-11 09:11:16
...

        在以往的unity中物体的移动缩放的过程中,往往会出现一个问题,就是相机跟随,导致物体变形,所以自己就想不要物体变形,物体又可以移动缩放,在网上查了很多,没有具体的代码,自己根据前人经验,来写这几句代码,如有错误,请大家修改指正,我已经测试,没有问题。可以编译到Android或者是Webgl上手机打开,但是这个代码只能触摸的,如果大家有好的,请留言


下载连接:http://download.csdn.net/download/xuxinqingjiao1/10178507


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

public class Move : MonoBehaviour
{
    private Touch oldTouch1;  //手指触摸点1
    private Touch oldTouch2;  //手指触摸点2
    public float speed = 0.005F;

    void Update()
    {
        if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
        {
            Vector3 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
            transform.Translate(touchDeltaPosition.x * speed, -touchDeltaPosition.y * speed, 0);
        }

        if (Input.touchCount > 1)
        {
            ////多点触摸, 放大缩小  
            Touch newTouch1 = Input.GetTouch(0);
            Touch newTouch2 = Input.GetTouch(1);

            //第2点刚开始接触屏幕, 只记录,不做处理  
            if (newTouch2.phase == TouchPhase.Began)
            {
                oldTouch2 = newTouch2;
                oldTouch1 = newTouch1;
                return;
            }
            //计算老的两点距离和新的两点间距离,变大要放大模型,变小要缩放模型  
            float oldDistance = Vector2.Distance(oldTouch1.position, oldTouch2.position);
            float newDistance = Vector2.Distance(newTouch1.position, newTouch2.position);

            //两个距离之差,为正表示放大手势, 为负表示缩小手势  
            float offset = newDistance - oldDistance;
            //放大因子, 一个像素按 0.01倍来算(200可调整)  
            float scaleFactor = offset / 200f;
            Vector3 localScale = transform.localScale;
            Vector3 scale = new Vector3(localScale.x + scaleFactor,
                localScale.y + scaleFactor,
                localScale.z + scaleFactor);

            //最小缩放到 0.3 倍  
            if (scale.x > 0.3f && scale.y > 0.3f && scale.z > 0.3f)
            {
                transform.localScale = scale;
            }

            //记住最新的触摸点,下次使用  
            oldTouch1 = newTouch1;
            oldTouch2 = newTouch2;
        }
    }
}