先说说我遇到的坑吧:
在做图像检测的时候,用的是Vuforia 的 打包Sdk,具体想要实现的功能就是,当用户的摄像头检测到指定的图片时,将已经准备好的人物模型显示出来,当用户长按手机屏幕的时候,令模型消失,具体代码如下

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

public class TouchType : MonoBehaviour
{
    private float touchTime;//用来记录手指按下的时间
    private bool newTouch = false;//判断是否按下屏幕
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButton(0))//作用就是当单击寒冰,让寒冰自动消失
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//向手指点击的位置发射一条射线
            RaycastHit hitInfo = new RaycastHit();//接收返回的信息,射线触碰到谁就返回谁的信息??
            Debug.Log("点击事件");
            Debug.Log(Physics.Raycast(ray, out hitInfo,10000));
            if (Physics.Raycast(ray, out hitInfo))//若发射的射线与屏幕中的任意碰撞器发生碰撞,则返回碰撞器的详细信息
            {
                Debug.Log("判断事件");
                if (Input.touchCount == 1)
                {
                    Debug.Log("触摸事件");
                    Touch touch = Input.GetTouch(0);//获取到点击屏幕的事件

                    if (touch.phase == TouchPhase.Began)
                    {
                        newTouch = true;
                        touchTime = Time.time;
                    }
                    else if (touch.phase == TouchPhase.Stationary)//说明现在的点击状态是点击之后静止也就是长按
                    {
                        if (newTouch == true && Time.time - touchTime > 1F)
                        {
                            newTouch = false;
                            Destroy(hitInfo.collider.gameObject);//销毁所触碰到的物体
                        }
                    }
                    else
                    {
                        newTouch = false;
                    }

                }
            }
        }
    }
}

这样就将长按屏幕,人物形象自动销毁的功能实现了,在这里插一嘴,当我打包成apk文件的时候遇到了问题,第一个说我的文件名称不对,这个问题很好解决

解决如下

Unity3d的射线碰撞检测 unity射线检测不到碰撞体_ios

在file->Building setting->player setting中将packageName修改成:com.(company Name).(Product Name)即可

第二个问题是,重新发布之后,系统提示我说Audroid平台不支持 Audroid TV什么什么的,后来上网查了查,后来知道是因为,安卓平台不支持这个括起来的选项,但是系统默认是勾选上的,

Unity3d的射线碰撞检测 unity射线检测不到碰撞体_ios_02


第三个问题是真的很烧脑,我的所有功能代码已经完成,也可以运行,但是在测试的时候发现,无论我是怎样长按手机屏幕,我所构造的模型都不会被销毁,上网查,有的说是可能是系统检测的时间太长,当我发射一条射线之后的那个时间,系统可能没有检测到这里把这个可能的解决步骤,调试步骤是

Edit->Project setting 然后修改下面的属性

Unity3d的射线碰撞检测 unity射线检测不到碰撞体_Time_03


Fixed Timestep:(固定时间步长)

在屏幕上绘制帧之前,unity 将固定时间提前一段固定增量时间,并在到达当前时间之前执行物理计算。这直接与固定时间步长 (fixed timestep)属性相关联,用途就是固定时间步长 (fixed timestep)的值越小,进行物理计算的频率越高,但是CPU的负担就越大.

Maxmum…:(最大时间步长)

固定时间步长是稳定的物理模拟的保证。然而,如果游戏对物理负担大并且已经运行缓慢或偶尔会降至低帧速率,那么固定时间步长也可能对性能带来负面影响。帧所用时间越长 - 就必须执行更大的固定更新步长以转到下一个帧。这会导致性能下降。为避免这种场景的出现,unity ios 引入了允许的最大时间步长 (maximum allowed timestep),以确保物理计算的运行时间不会超出规定的阈值。

时间尺度 (time scale):

时间前进的速度。更改此值以模拟子弹时间特效。1 表示实时时间。.5 表示速度减半;2 表示速度加倍。

然后第二种可能就是,用于检测的物体,也就是功能中的人物模型需要有碰撞器,射线之后碰到碰撞器的时候才会停止,所以这就引发了两种可能,第一种就是,没有给需要检测的物体添加碰撞器,第二种可能就是所添加的碰撞器尺寸太小

第三种可能就是解决我问题的了,由于我的工程中存在两个摄像机,一个是MainCamera,另一个就是用来识别图片的ARCamera了,当我删掉了MainCamera的时候,一切都正常了。具体原因没查到,希望各位大佬指教。