Unity中Touch类的简单介绍

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


public class TouchDemo : MonoBehaviour
{
    public Text infoText;
    private string info;
    private void Update()
    {
        //每当一个手指触摸屏幕时,unity都会围棋生成一个touch对象
        //Input.touchCount 是可以获取当前Touch对象的个数
        if (Input.touchCount > 0)
        {
            info = string.Empty;
            info += "touchCount" + Input.touchCount + "\n";
            //unity会将当前存在的所有Touch对象放在Input.touches数组里面
            //另一种方式获取指定index的Touch对象:Input.GetTouch(index)

            Touch myTouch = Input.touches[0];

            //myTouch.fingerId是用来识别当前手指的唯一表示

            info += "fingerId:" + myTouch.fingerId + "\n";

            //deltaPosition当前位置与上次位置之间的差

            info += "deltaPosition:" + myTouch.deltaPosition + "\n";

            //deltaTime本次记录Touch对象状态与上次记录Touch状态之间的时间差

            info += "deltaTime:" + myTouch.deltaTime + "\n";

            //Touch对象的生命周期的结束并不是手指离开屏幕后立刻销毁
            //如果一根手指在同一位置快速点击,侧视作同一Touch对象
            //tapCount为Touch对象所对应的手指点击屏幕的次数

            info += "tapCount:" + myTouch.tapCount + "\n";

            //phase表示当前手指锁对应的Touch对象阶段(状态)
            //Began 开始状态
            //Moved 移动状态
            //Stationary  不动状态
            //Ended 结束状态
            //Canceled 取消状态
            info += "phase:" + myTouch.phase + "\n";
        }
        infoText.text = info;
    }

}


Unity使用Touch拖动物体,通常涉及到处理触摸输入事件,并对物体的位置进行更新。以下是一个基本的实现步骤: 1. **获取Touch输入**:首先,你需要监听屏幕上的触摸事件,Unity提供了`Input.GetTouch`方法可以获取到触摸信息。 2. **开始拖动检测**:当检测到屏幕被触摸时(通常是`Input.GetTouch(0).phase == TouchPhase.Began`),记录下触摸的位置和被拖动物体的初始位置。 3. **更新物体位置**:在拖动过程(`TouchPhaseMoved`),根据触摸点的新位置和物体的初始位置,计算出物体应该移动到的新位置,并将物体移动到该位置。 4. **结束拖动处理**:当触摸结束时(`TouchPhaseEnded`),停止物体的移动。 以下是一个简单Unity脚本示例,展示了如何实现基本的Touch拖动物体: ```csharp using UnityEngine; public class TouchDragObject : MonoBehaviour { private Vector3 touchPosition; private Vector3 offset; private Camera mainCamera; void Start() { mainCamera = Camera.main; } void Update() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); switch (touch.phase) { case TouchPhase.Began: Ray ray = mainCamera.ScreenPointToRay(touch.position); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.transform == this.transform) { // 记录偏移量和触摸的初始位置 offset = this.transform.position - mainCamera.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, mainCamera.nearClipPlane)); } } break; case TouchPhase.Moved: // 计算物体的新位置 touchPosition = mainCamera.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, mainCamera.nearClipPlane)) + offset; // 更新物体的位置 this.transform.position = touchPosition; break; case TouchPhase.Ended: // 可以在这里处理拖动结束的逻辑 break; } } } } ``` 将这个脚本附加到你想要拖动的物体上,就可以通过触摸屏幕来拖动它了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值