Unity Remote5とiOS13間のInput.Gyro取得不具合について.1
検証環境
iPhoneサイド
概要
Unity2019.3とiPhoneのUnity Remote5を用いて、iPhoneSEとMacを有線で接続し、
Input.Gyroの値をUnityのPlayで取得すると、値が特定の角度で非連続的になってしまう問題を発見しました
動画8秒ほどから見られるのですが、iPhoneを横持ちした際に、仰角を取るときと俯角を取るときで、z軸中心に180度回転してしまっています
— すじーい (@aegis_fms) 2019年10月14日
詳しい検証はまだしていませんが、iOS12のiPhone6Sでは正常の挙動を示したので、iOSのバージョンを原因と踏んでます。 pic.twitter.com/TK7Z1wEDDx
オブジェクトの角度が飛んでいる?のと
重力方向を軸とした時の回転が正常に取得できていません
上記環境でビルドしたプログラムをiPhoneにインストールして実行した結果、ジャイロの値は正常に取得できたので、Unity Remote5上でデバッグした時に発生する問題です
以下はビルドして実行した動画
— すじーい (@aegis_fms) 2019年10月14日
ツイートでも書いているのですが、iOS12.3の端末を接続してテストすると、正常にジャイロの値が取得できるので、OSのバージョンによって挙動が異なるようです
取得するためのc#はいたってシンプルです
//getGyro.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class getGyro : MonoBehaviour { Quaternion currentGyro; void Start() { Input.gyro.enabled = true; } void Update() { var rotRH = Input.gyro.attitude; var rot = new Quaternion(-rotRH.x, -rotRH.z, -rotRH.y, rotRH.w) * Quaternion.Euler(90f, 0f, 0f); transform.localRotation = rot; } void OnGUI() { var g = Input.gyro.attitude; GUILayout.Label(g.x.ToString()); GUILayout.Label(g.y.ToString()); GUILayout.Label(g.z.ToString()); GUILayout.Label(g.w.ToString()); } }
iOS13端末上のiPhoneでRemoteを使うならばその飛びを補完するコードが必要になりそうです
しかし重力軸回転のブレは単純に加速度センサの値を取ってきているようにも見えるので、時間があったら検証します
では。