Easy防抖动

参考了一下别人的帖子,修改了一下,效果正在试,嘿嘿,欢迎指点

脚本指教复制到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);
            }
        }
    }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山竹炒大蒜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值