UniRxを利用した、Androidのジャイロの値を取得

実現したいこと

Androidのジャイロセンサーの値を取得するスクリプトを作成したい。
そのため、下記のサイト(前提に添付)を参考に制作を行ったが、サイト通りにいかないため、有識者の方の知識をいただきたいです。

前提

参考サイト:https://qiita.com/Cova8bitdot/items/a51fb48f3b94821867fb
Unityバージョン:2022.2.18
コーディングツール:visualstudio2019

下記の「該当のソースコード」での、クラス宣言時に書かれた”IAccelerationStream”, ”IGyroStream”の名前空間が見つからないと言われ、エラーになっています。この名前空間が見つかるようにしたいです。

該当のソースコード

using System; using UniRx; using UnityEngine; public class SensorStream : IDisposable, IAccelerationStream, IGyroStream { private readonly CompositeDisposable m_disposable = new CompositeDisposable(); private readonly Vector3ReactiveProperty m_accelProperty = new Vector3ReactiveProperty(Vector3.zero); private readonly Vector3ReactiveProperty m_accelAngleProperty = new Vector3ReactiveProperty(Vector3.zero); private readonly Vector3ReactiveProperty m_gyroProperty = new Vector3ReactiveProperty(Vector3.zero); private readonly QuaternionReactiveProperty m_gyroAttitudeProperty = new QuaternionReactiveProperty(Quaternion.identity); public SensorStream() { Input.gyro.enabled = true; m_accelProperty.AddTo(m_disposable); m_gyroProperty.AddTo(m_disposable); Vector3 angle = Vector3.zero; Observable.EveryGameObjectUpdate().Subscribe(_ => { m_accelProperty.Value = Input.acceleration; angle.x = Mathf.Asin(Mathf.Clamp(Input.acceleration.x, -1, 1)) * Mathf.Rad2Deg; angle.y = Mathf.Asin(Mathf.Clamp(Input.acceleration.y, -1, 1)) * Mathf.Rad2Deg; angle.z = Mathf.Asin(Mathf.Clamp(Input.acceleration.z, -1, 1)) * Mathf.Rad2Deg; m_accelAngleProperty.Value = angle; m_gyroProperty.Value = Input.gyro.rotationRateUnbiased * Mathf.Rad2Deg; m_gyroAttitudeProperty.Value = Input.gyro.attitude; }).AddTo(m_disposable); } public void Dispose() { if (m_disposable.IsDisposed) return; m_disposable.Dispose(); } /// <summary> /// 値取得用ストリーム発行 /// </summary> /// <returns></returns> IObservable<Vector3> IAccelerationStream.GetStream() { return m_accelProperty; } /// <summary> /// 加速度センサーから角度変換を行なった時のストリーム /// </summary> /// <returns></returns> IObservable<Vector3> IAccelerationStream.GetAccel2AngleStream() { return m_accelAngleProperty; } /// <summary> /// 値取得用ストリーム発行 /// </summary> /// <returns></returns> IObservable<Vector3> IGyroStream.GetStream() { return m_gyroProperty; } /// <summary> /// 傾き取得用ストリーム発行 /// </summary> /// <returns></returns> IObservable<Quaternion> IGyroStream.GetRotationStream() => m_gyroAttitudeProperty; /// <summary> /// 指定フレーム数平均を行なったストリームの発行 /// </summary> /// <param name="averageFrame"></param> /// <returns></returns> IObservable<Vector3> IGyroStream.GetAveragedStream(int averageFrame) { var newProperty = new Vector3ReactiveProperty().AddTo(m_disposable); m_gyroProperty.Buffer(averageFrame, 1) .Subscribe(list => { Vector3 ret = Vector3.zero; foreach (var item in list) { ret = ret + item; } ret /= averageFrame; newProperty.Value = ret; }).AddTo(m_disposable); return newProperty; } }

試したこと

UniRxをusingしようとした際、UniRxの名前空間が見つからないと言われたため、Editor画面のProjectで、UniRxをPluginフォルダの中から出した。※その後Pluginフォルダは削除。

コメントを投稿

0 コメント