untiy 监听屏幕点击 物体(实现)

第一种方式:
1.百度的第三方法

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

public class TouchType : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {

    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {//判断是否是点击事件
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if (Physics.Raycast(ray, out hitInfo))
            {
                //如果是一根手指触摸屏幕而且是刚开始触摸屏幕 
                if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began)
                {
                    Debug.Log("触碰的对象 :" + hitInfo.collider.gameObject.name);
                    GameObject.Find("title/Text").GetComponent<Text>().text = hitInfo.collider.gameObject.name;
                    if (Input.GetTouch(0).tapCount == 2 && hitInfo.collider.gameObject.name == "wolun")
                    //判断点击的次数
                    {
                        
                    }
                }
            }
        }


    }
}

2.相机需要添加(以下组件)
在这里插入图片描述
3.被点击物体一定要包含检测组键
比如:box ,meshColider,2dClips,等等
4.第一个方法是全局的,随便挂在一个物体下就行,全局就只能出现一个不然事件触发会触发多次
****

第二种方式:Trigger(组件可以事件,比较繁琐)

实时物体识别需要用到计算机视觉领域中的深度学习算法,比较复杂,需要很长时间的学习和实践,不过现在已经有一些成熟的开源库可以使用,比如 TensorFlow Lite 和 OpenCV。 这里给出一个使用 TensorFlow Lite 进行实时物体识别的简单示例代码,供参考: 1. 下载模型文件 首先需要下载一个预训练好的模型文件,可以从 TensorFlow 官网下载,也可以使用已经训练好的模型文件,比如 MobileNet。 2. 导入 TensorFlow Lite 库 在项目的 build.gradle 文件中加入以下依赖: ``` dependencies { implementation 'org.tensorflow:tensorflow-lite:2.3.0' } ``` 3. 加载模型文件 ```kotlin val modelFile = File(modelFilePath) val model = Interpreter(modelFile) ``` 4. 处理图片数据 将摄像头捕获到的图像数据转换成模型所需的格式,一般是将图片缩放到指定大小,并且将像素值转换成浮点数。 ```kotlin val bitmap = // 从摄像头捕获到的图像数据转换成 Bitmap 格式 val inputShape = model.getInputTensor(0).shape() // 获取输入张量的形状 val inputBuffer = ByteBuffer.allocateDirect(inputShape[1] * inputShape[2] * inputShape[3] * 4) // 创建输入缓冲区 inputBuffer.order(ByteOrder.nativeOrder()) // 设置字节序为本地字节序 val intValues = IntArray(bitmap.width * bitmap.height) // 创建整型数组 bitmap.getPixels(intValues, 0, bitmap.width, 0, 0, bitmap.width, bitmap.height) // 将 Bitmap 转换成整型数组 var pixel = 0 for (i in 0 until inputShape[1]) { for (j in 0 until inputShape[2]) { val `val` = intValues[pixel++] inputBuffer.putFloat(((`val` shr 16) and 0xFF) / 255.0f) // R通道,归一化到 [0, 1] 范围内 inputBuffer.putFloat(((`val` shr 8) and 0xFF) / 255.0f) // G通道,归一化到 [0, 1] 范围内 inputBuffer.putFloat((`val` and 0xFF) / 255.0f) // B通道,归一化到 [0, 1] 范围内 } } ``` 5. 运行模型 ```kotlin val outputShape = model.getOutputTensor(0).shape() // 获取输出张量的形状 val outputBuffer = ByteBuffer.allocateDirect(outputShape[1] * 4) // 创建输出缓冲区 model.run(inputBuffer, outputBuffer) // 运行模型 ``` 6. 解析输出结果 将输出缓冲区中的数据解析成模型预测的物体类别和置信度。 ```kotlin val outputFloats = FloatArray(outputShape[1]) outputBuffer.rewind() outputBuffer.asFloatBuffer().get(outputFloats) // 将输出缓冲区中的数据转换成浮点型数组 val results = mutableListOf<Result>() for (i in outputFloats.indices) { if (outputFloats[i] > confidenceThreshold) { // 如果置信度大于指定阈值,则表示预测到了一个物体 val label = labels[i] // 获取物体类别标签 results.add(Result(label, outputFloats[i])) // 将物体类别和置信度保存到结果列表中 } } ``` 7. 显示结果 将结果显示在屏幕上,比如用 TextView 来显示。 ```kotlin val resultTextView: TextView = findViewById(R.id.resultTextView) val sb = StringBuilder() for (result in results) { sb.append(result.label).append(": ").append(result.confidence).append("\n") } resultTextView.text = sb.toString() ``` 这只是一个简单的示例代码,实际的物体识别应用还需要考虑很多问题,比如如何提高模型的准确率、如何优化算法的速度等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值