Unity触摸屏TouchPhase多点触碰旋转放大缩小

Unity触摸屏TouchPhase多点触碰旋转放大缩小

最近做了一个展厅的项目需要用到触摸屏多点触控,直接上代码

    private Touch oldTouch1;  //上次触摸点1(手指1)  
    private Touch oldTouch2;  //上次触摸点2(手指2)  

    void Update()
    {

        //没有触摸  
        if (Input.touchCount <= 0)
        {
            return;
        }

        //单点触摸, 水平上下旋转  
        if (1 == Input.touchCount)
        {
            Touch touch = Input.GetTouch(0);
            Vector2 deltaPos = touch.deltaPosition;
            transform.Rotate(Vector3.down * deltaPos.x, Space.World);
            transform.Rotate(Vector3.right * deltaPos.y, Space.World);
        }

        //多点触摸, 放大缩小  
        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倍来算(100可调整)  
        float scaleFactor = offset / 100f;
        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;
    }
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Unity中,可以通过多点摸来实现模型的旋转。以下是一种实现方式: 1. 首先,确保你的设备支持多点摸功能。 2. 创建一个3D模型,并将其添加到场景中。 3. 在脚本中,使用`Input.touchCount`来获取当前屏幕上的摸点数量。 4. 使用`Input.GetTouch(index)`来获取每个摸点的信息,其中`index`表示摸点的索引。 5. 使用`Touch.phase`来判断摸的状态,例如`Began`表示摸开始,`Moved`表示摸移动,`Ended`表示摸结束。 6. 在摸移动状态下,可以使用`Touch.deltaPosition`来获取摸点的位移量。 7. 将摸点的位移量映射到模型的旋转角度上,可以使用`Transform.Rotate`方法来实现模型的旋转。 8. 在脚本中更新模型的旋转角度,并将其应用到模型的Transform组件上。 下面是一个简单的示例代码: ```csharp using UnityEngine; public class RotateModel : MonoBehaviour { private Vector2 previousTouchPos; void Update() { if (Input.touchCount == 2) { Touch touch1 = Input.GetTouch(0); Touch touch2 = Input.GetTouch(1); if (touch2.phase == TouchPhase.Began) { previousTouchPos = touch2.position - touch1.position; } else if (touch1.phase == TouchPhase.Moved && touch2.phase == TouchPhase.Moved) { Vector2 currentTouchPos = touch2.position - touch1.position; Vector2 deltaPos = currentTouchPos - previousTouchPos; float rotationSpeed = 0.5f; // 调整旋转速度 transform.Rotate(Vector3.up, -deltaPos.x * rotationSpeed, Space.World); transform.Rotate(Vector3.right, deltaPos.y * rotationSpeed, Space.World); previousTouchPos = currentTouchPos; } } } } ``` 这段代码会在有两个摸点且摸点移动时,根据摸点的位移量来旋转模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值