unity3d 读取加速度传感器(高级)

示例

直接使用来自加速度传感器的原始值来移动或旋转GameObject可能会导致诸如抖动或振动之类的问题。建议在使用前先平滑这些值。实际上,在使用之前,应始终将加速度传感器的值进行平滑处理。这可以通过一个低通滤波器来完成Vector3.Lerp。

//该值越低,该值越平滑,并且更新Accel越快。30似乎很好

const float updateSpeed = 30.0f;

float AccelerometerUpdateInterval = 1.0f / updateSpeed;

float LowPassKernelWidthInSeconds = 1.0f;

float LowPassFilterFactor = 0;

Vector3 lowPassValue = Vector3.zero;

void Start()

{

    //滤波加速度计

    LowPassFilterFactor = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds;

    lowPassValue = Input.acceleration;

}

void Update()

{

    //获取原始加速度计值(传入false以获得原始加速度计值)

    Vector3 rawAccelValue = filterAccelValue(false);

    Debug.Log("RAW X: " +rawAccelValue.x+ "  Y: " +rawAccelValue.y+ "  Z: " + rawAccelValue.z);

    //获取平滑的加速度计值(传入true以获取滤波后的加速度计值)

    Vector3 filteredAccelValue = filterAccelValue(true);

    Debug.Log("过滤X: " +filteredAccelValue.x+ "  Y: " +filteredAccelValue.y+ "  Z: " + filteredAccelValue.z);

}

//滤波加速度计

Vector3 filterAccelValue(bool smooth)

{

    if (smooth)

        lowPassValue = Vector3.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);

    else

        lowPassValue = Input.acceleration;

    return lowPassValue;

}

           

以上是 unity3d 读取加速度传感器(高级) 的全部内容, 来源链接: utcz.com/z/355577.html

回到顶部