Unity Vufoia+AR模型抖动的问题

下面脚本挂在模型上 

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 防抖动
/// </summary>
public class FangDouDong : MonoBehaviour
{

    private float lastX = 0;
    private float lastY = 0;
    private float lastZ = 0;
    private float lastRX = 0;
    private float lastRY = 0;
    private float lastRZ = 0;
    protected 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 (((Math.Abs(this.transform.position.x - lastX) > 0.06 || Math.Abs(this.transform.position.y - lastY) > 0.06 || Math.Abs(this.transform.position.z - lastZ) > 0.06) &&
(Math.Abs(this.transform.position.x - lastX) > 0.13|| Math.Abs(this.transform.position.y - lastY) > 0.13 || Math.Abs(this.transform.position.z - lastZ) > 0.13)) ||
((Math.Abs(myrx - lastRX) > 3 && Math.Abs(myry - lastRY) > 3 && Math.Abs(myrz - lastRZ) > 3) && (Math.Abs(myrx - lastRX) > 6 || Math.Abs(myry - lastRY) > 6 || Math.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);
        }
    }
}

 如果感觉不清晰可以加一个摄像头自动对焦

void Start(){
Vuforia.CameraDevice.Instance.SetFocusMode(Vuforia.CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
}

 

亲测有效果

posted @ 2021-06-11 17:12  剑起苍穹  阅读(435)  评论(0编辑  收藏  举报
/*鼠标点击特效*/