unity3d – 加速度计灵敏度

我正在测试Unity3D 4.3中的加速度计代码。 我想要做的是在倾斜ipad的同时简单地改变物体角度,以及像真实物体一样的假视角。 一切都很好,除了加速度计有点过于敏感的事实,我可以看到GameObject就像闪烁,即使我把它放在桌子上。 如何使其不那么敏感,以便即使用手握住,角度也会根据倾斜度而变化,物体保持稳定?

这是我的代码:

void Update () { Vector3 dir = Vector3.zero; dir.x = Mathf.Round(Input.acceleration.x * 1000.0f) / 1000.0f; dir.y = Mathf.Round(Input.acceleration.y * 1000.0f) / 1000.0f; dir.z = Mathf.Round(Input.acceleration.z * 1000.0f) / 1000.0f; // clamp acceleration vector to the unit sphere if (dir.sqrMagnitude > 1) dir.Normalize(); // Make it move 10 meters per second instead of 10 meters per frame... dir *= Time.deltaTime; dir *= speed; acx = dir.x; acy = dir.y; acz = dir.z; transform.rotation = Quaternion.Euler(dir.y-20, -dir.x, 0); } 

在使用信号输出之前,您可能需要使用低通滤波器 (s。 指数移动平均值以获得有关软件的更好描述)。 我总是使用本机代码来获取iPhone上的加速度计和陀螺仪值,因此我不能100%确定Unity如何处理这个问题。 但是根据你所描述的,价值看起来没有过滤。

低通滤波器计算所有先前值的加权平均值。 例如,过滤因子为0.1,您的加权平均值为:

 Vector3 aNew = Input.acceleration; a = 0.1 * aNew + 0.9 + a; 

这样,您的值将以一个小延迟为代价进行平滑处理。 以50 Hz运行加速度计您将不会注意到它。

我不能让Kay的例子工作,因为它没有倍增最后一部分,所以这是我的小修正:

 Vector3 aNew = Input.acceleration; a = (0.1 * aNew) + (0.9 * a);