参考了一下别人的帖子,修改了一下,效果正在试,嘿嘿,欢迎指点
脚本指教复制到ImageTarget脚本里面就可以,继承的Update()
using System.Collections;
using System.Collections.Generic;using UnityEngine;
namespace EasyAR
{
public class ImageTargetBehaviour : ImageTargetBaseBehaviour
{
public GameObject go;
float lastX;
float lastY;
float lastZ;
float lastRY;
float lastRX;
float lastRZ;
//protected override void Awake()
// {
// base.Awake();
//TargetFound += ImageTargetBehaviour_TargetFound;
// }
// void ImageTargetBehaviour_TargetFound(TargetAbstractBehaviour obj)
// {
// print(this.name);
// if (this.name == "ImageTarget (1)")
//{
// //StartCoroutine(HeXieHao._instance.DongHuaXiaoShi());
// if (Manager.isooo)
// {
// go.SetActive(true);
// Manager.isooo = false;
// }
// }
// }
protected override void Update()
{
base.Update();
float myrx = 0;
myrx = this.transform.localEulerAngles.x;
while (myrx >= 360)//为了让判断条件时方便,强制把所有不在1~270以内的数字,转换为-270~270
{
myrx -= 360;
}
while (myrx <= -360)
{
myrx += 360;
}
while (myrx > 270 && 360 - myrx >= 0)
myrx = -(360 - myrx);
float myry = 0;
myry = this.transform.localEulerAngles.y;
while (myry >= 360)
{
myry -= 360;
}
while (myry <= -360)
{
myry += 360;
}
while (myry > 270 && 360 - myry >= 0)
myry = -(360 - myry);
float myrz = 0;
myrz = this.transform.localEulerAngles.z;
while (myrz >= 360)
{
myrz -= 360;
}
while (myrz <= -360)
{
myrz += 360;
}
while (myrz > 270 && 360 - myrz >= 0)
myrz = -(360 - myrz);
//关键,当模型抖动超过一定范围时,不修正模型的坐标角度,记录坐标和角度
if (((Mathf.Abs(this.transform.position.x - lastX) > 0.06 || Mathf.Abs(this.transform.position.y - lastY) > 0.06 || Mathf.Abs(this.transform.position.z - lastZ) > 0.06) &&
(Mathf.Abs(this.transform.position.x - lastX) > 0.13 || Mathf.Abs(this.transform.position.y - lastY) > 0.13 || Mathf.Abs(this.transform.position.z - lastZ) > 0.13)) ||
((Mathf.Abs(myrx - lastRX) > 3 && Mathf.Abs(myry - lastRY) > 3 && Mathf.Abs(myrz - lastRZ) > 3) && (Mathf.Abs(myrx - lastRX) > 6 || Mathf.Abs(myry - lastRY) > 6 || Mathf.Abs(myrz - lastRZ) > 6)))
{
lastX = this.transform.position.x;
lastY = this.transform.position.y;
lastZ = this.transform.position.z;
lastRX = myrx;
lastRY = myry;
lastRZ = myrz;
this.transform.rotation = Quaternion.Euler(lastRX, lastRY, lastRZ);
this.transform.position = new Vector3(lastX, lastY, lastZ);
}
else//模型抖动范围过小时,修正模型坐标为上一次正确的坐标
{
this.transform.rotation = Quaternion.Euler(lastRX, lastRY, lastRZ);
this.transform.position = new Vector3(lastX, lastY, lastZ);
}
}
}
}