// Tries to activate a certain rotation fallback. // If ActivateRotation is called, the best (in most cases) fallback is used. // There might be cases/devices where other approaches yield better results. // // Returns true if fallback is available and activated. public static bool TryForceRotationFallback(RotationFallbackType fallbackType) { #pragma warning disable 162 // for platforms other than Android, always use RotationQuaternion // if(Application.platform != RuntimePlatform.Android) // fallbackType = RotationFallbackType.RotationQuaternion; if(Application.platform == RuntimePlatform.IPhonePlayer) fallbackType = RotationFallbackType.RotationQuaternion; switch(fallbackType) { case RotationFallbackType.RotationQuaternion: if (Sensor.Get(Sensor.Type.RotationVector).available) { Sensor.Activate(Sensor.Type.RotationVector); rotationHelper = new GetRotationHelper(RotationQuaternion); current = RotationFallbackType.RotationQuaternion; Debug.Log("RotationVector is available."); return true; } break; case RotationFallbackType.OrientationAndAcceleration: if (Sensor.Get(Sensor.Type.Orientation).available) { Sensor.Activate(Sensor.Type.Orientation); rotationHelper = new GetRotationHelper(OrientationAndAcceleration); current = RotationFallbackType.OrientationAndAcceleration; Debug.Log("Orientation/Acceleration is available."); return true; } break; case RotationFallbackType.MagneticField: if (Sensor.Get(Sensor.Type.MagneticField).available) { Sensor.Activate(Sensor.Type.Accelerometer); Sensor.Activate(Sensor.Type.MagneticField); rotationHelper = new GetRotationHelper(MagneticField); current = RotationFallbackType.MagneticField; Debug.Log("Accelerometer/MagneticField is available."); return true; } break; case RotationFallbackType.AccelerationOnly: { rotationHelper = new GetRotationHelper(InputAcceleration); Debug.Log("InputAcceleration is available - no compass support."); return true; } break; } return false; #pragma warning restore 162 }
// Tries to activate a certain rotation fallback. // If ActivateRotation is called, the best (in most cases) fallback is used. // There might be cases/devices where other approaches yield better results. // // Returns true if fallback is available and activated. public static bool TryForceRotationFallback(RotationFallbackType fallbackType) { #pragma warning disable 162 switch (fallbackType) { case RotationFallbackType.RotationQuaternion: if (Sensor.Get(Sensor.Type.RotationVector).available) { Sensor.Activate(Sensor.Type.RotationVector); _rotationHelper = new GetRotationHelper(RotationQuaternion); current = RotationFallbackType.RotationQuaternion; Debug.Log("First sensor choice is available."); return(true); } break; case RotationFallbackType.OrientationAndAcceleration: if (Sensor.Get(Sensor.Type.Orientation).available) { Sensor.Activate(Sensor.Type.Orientation); _rotationHelper = new GetRotationHelper(OrientationAndAcceleration); current = RotationFallbackType.OrientationAndAcceleration; Debug.Log("Second sensor choice is available."); return(true); } break; case RotationFallbackType.MagneticField: if (Sensor.Get(Sensor.Type.MagneticField).available) { Sensor.Activate(Sensor.Type.Accelerometer); Sensor.Activate(Sensor.Type.MagneticField); _rotationHelper = new GetRotationHelper(MagneticField); current = RotationFallbackType.MagneticField; Debug.Log("Third sensor choice is available."); return(true); } break; } return(false); #pragma warning restore 162 }
// Call this to activate the best available rotation sensor public static void ActivateRotation() { // looks which sensors are available // and uses the best one for rotation calculation gotFirstValue = false; if (Sensor.Get(Sensor.Type.RotationVector).available) { // on iOS, first choice will always be used (others are made for Android) Sensor.Activate(Sensor.Type.RotationVector); _rotationHelper = new GetRotationHelper(RotationQuaternion); current = RotationFallbackType.RotationQuaternion; Debug.Log("RotationVector is available."); } else if (Sensor.Get(Sensor.Type.Orientation).available) { Sensor.Activate(Sensor.Type.Orientation); _rotationHelper = new GetRotationHelper(OrientationAndAcceleration); current = RotationFallbackType.OrientationAndAcceleration; Debug.Log("Orientation/Acceleration is available."); } else if (Sensor.Get(Sensor.Type.MagneticField).available) { Sensor.Activate(Sensor.Type.Accelerometer); Sensor.Activate(Sensor.Type.MagneticField); _rotationHelper = new GetRotationHelper(MagneticField); current = RotationFallbackType.MagneticField; Debug.Log("Accelerometer/MagneticField is available."); } else { _rotationHelper = new GetRotationHelper(InputAcceleration); Debug.Log("InputAcceleration is available - no compass support."); } }
// Tries to activate a certain rotation fallback. // If ActivateRotation is called, the best (in most cases) fallback is used. // There might be cases/devices where other approaches yield better results. // // Returns true if fallback is available and activated. public static bool TryForceRotationFallback(RotationFallbackType fallbackType) { #pragma warning disable 162 switch(fallbackType) { case RotationFallbackType.RotationQuaternion: if (Sensor.Get(Sensor.Type.RotationVector).available) { Sensor.Activate(Sensor.Type.RotationVector); _rotationHelper = new GetRotationHelper(RotationQuaternion); current = RotationFallbackType.RotationQuaternion; Debug.Log("First sensor choice is available."); return true; } break; case RotationFallbackType.OrientationAndAcceleration: if (Sensor.Get(Sensor.Type.Orientation).available) { Sensor.Activate(Sensor.Type.Orientation); _rotationHelper = new GetRotationHelper(OrientationAndAcceleration); current = RotationFallbackType.OrientationAndAcceleration; Debug.Log("Second sensor choice is available."); return true; } break; case RotationFallbackType.MagneticField: if (Sensor.Get(Sensor.Type.MagneticField).available) { Sensor.Activate(Sensor.Type.Accelerometer); Sensor.Activate(Sensor.Type.MagneticField); _rotationHelper = new GetRotationHelper(MagneticField); current = RotationFallbackType.MagneticField; Debug.Log("Third sensor choice is available."); return true; } break; } return false; #pragma warning restore 162 }
// Tries to activate a certain rotation fallback. // If ActivateRotation is called, the best (in most cases) fallback is used. // There might be cases/devices where other approaches yield better results. // // Returns true if fallback is available and activated. public static bool TryForceRotationFallback(RotationFallbackType fallbackType) { #pragma warning disable 162 // for platforms other than Android, always use RotationQuaternion // if(Application.platform != RuntimePlatform.Android) // fallbackType = RotationFallbackType.RotationQuaternion; if (Application.platform == RuntimePlatform.IPhonePlayer) { fallbackType = RotationFallbackType.RotationQuaternion; } switch (fallbackType) { case RotationFallbackType.RotationQuaternion: if (Sensor.Get(Sensor.Type.GameRotationVector).available) { Sensor.Activate(Sensor.Type.GameRotationVector); } else if (Sensor.Get(Sensor.Type.RotationVector).available) { Sensor.Activate(Sensor.Type.RotationVector); } if (Sensor.Get(Sensor.Type.GameRotationVector).available || Sensor.Get(Sensor.Type.RotationVector).available) { rotationHelper = new GetRotationHelper(RotationQuaternion); current = RotationFallbackType.RotationQuaternion; Debug.Log("RotationVector is available."); return(true); } break; case RotationFallbackType.OrientationAndAcceleration: if (Sensor.Get(Sensor.Type.Orientation).available) { Sensor.Activate(Sensor.Type.Orientation); rotationHelper = new GetRotationHelper(OrientationAndAcceleration); current = RotationFallbackType.OrientationAndAcceleration; Debug.Log("Orientation/Acceleration is available."); return(true); } break; case RotationFallbackType.MagneticField: if (Sensor.Get(Sensor.Type.MagneticField).available) { Sensor.Activate(Sensor.Type.Accelerometer); Sensor.Activate(Sensor.Type.MagneticField); rotationHelper = new GetRotationHelper(MagneticField); current = RotationFallbackType.MagneticField; Debug.Log("Accelerometer/MagneticField is available."); return(true); } break; case RotationFallbackType.AccelerationOnly: { rotationHelper = new GetRotationHelper(InputAcceleration); Debug.Log("InputAcceleration is available - no compass support."); return(true); } break; } return(false); #pragma warning restore 162 }