先说说我遇到的坑吧:
在做图像检测的时候,用的是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文件的时候遇到了问题,第一个说我的文件名称不对,这个问题很好解决
解决如下
在file->Building setting->player setting中将packageName修改成:com.(company Name).(Product Name)即可
第二个问题是,重新发布之后,系统提示我说Audroid平台不支持 Audroid TV什么什么的,后来上网查了查,后来知道是因为,安卓平台不支持这个括起来的选项,但是系统默认是勾选上的,
第三个问题是真的很烧脑,我的所有功能代码已经完成,也可以运行,但是在测试的时候发现,无论我是怎样长按手机屏幕,我所构造的模型都不会被销毁,上网查,有的说是可能是系统检测的时间太长,当我发射一条射线之后的那个时间,系统可能没有检测到这里把这个可能的解决步骤,调试步骤是
Edit->Project setting 然后修改下面的属性
Fixed Timestep:(固定时间步长)
在屏幕上绘制帧之前,unity 将固定时间提前一段固定增量时间,并在到达当前时间之前执行物理计算。这直接与固定时间步长 (fixed timestep)属性相关联,用途就是固定时间步长 (fixed timestep)的值越小,进行物理计算的频率越高,但是CPU的负担就越大.
Maxmum…:(最大时间步长)
固定时间步长是稳定的物理模拟的保证。然而,如果游戏对物理负担大并且已经运行缓慢或偶尔会降至低帧速率,那么固定时间步长也可能对性能带来负面影响。帧所用时间越长 - 就必须执行更大的固定更新步长以转到下一个帧。这会导致性能下降。为避免这种场景的出现,unity ios 引入了允许的最大时间步长 (maximum allowed timestep),以确保物理计算的运行时间不会超出规定的阈值。
时间尺度 (time scale):
时间前进的速度。更改此值以模拟子弹时间特效。1 表示实时时间。.5 表示速度减半;2 表示速度加倍。
然后第二种可能就是,用于检测的物体,也就是功能中的人物模型需要有碰撞器,射线之后碰到碰撞器的时候才会停止,所以这就引发了两种可能,第一种就是,没有给需要检测的物体添加碰撞器,第二种可能就是所添加的碰撞器尺寸太小
第三种可能就是解决我问题的了,由于我的工程中存在两个摄像机,一个是MainCamera,另一个就是用来识别图片的ARCamera了,当我删掉了MainCamera的时候,一切都正常了。具体原因没查到,希望各位大佬指教。