https://www.youtube.com/watch?v=MDkj3SrQFXE
using UnityEngine;
using System.Collections;
public class Magnetometer : MonoBehaviour {
public TextMesh Status_Text;
// Use this for initialization
void Start () {
Input.compass.enabled = true;
Input.location.Start ();
}
// Update is called once per frame
void Update () {
var xrot = Mathf.Atan2 (Input.acceleration.z, Input.acceleration.y);
var yzmag = Mathf.Sqrt (Mathf.Pow (Input.acceleration.y, 2) + Mathf.Pow (Input.acceleration.z, 2));
var zrot = Mathf.Atan2 (Input.acceleration.x, yzmag);
var xangle = xrot * (180 / Mathf.PI) + 90;
var zangle = -zrot * (180 / Mathf.PI);
transform.eulerAngles = new Vector3 (xangle, 0, zangle - Input.compass.trueHeading);
if (Status_Text != null) {
Status_Text.text = Input.compass.trueHeading.ToString ();
}
}
}
https://sourceforge.net/projects/grepwin/

using System;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace UnityStandardAssets.CrossPlatformInput
{
// helps with managing tilt input on mobile devices
public class TiltInput : MonoBehaviour
{
// options for the various orientations
public enum AxisOptions
{
ForwardAxis,
SidewaysAxis,
}
[Serializable]
public class AxisMapping
{
public enum MappingType
{
NamedAxis,
MousePositionX,
MousePositionY,
MousePositionZ
};
public MappingType type;
public string axisName;
}
public AxisMapping mapping;
public AxisOptions tiltAroundAxis = AxisOptions.ForwardAxis;
public float fullTiltAngle = 25;
public float centreAngleOffset = 0;
private CrossPlatformInputManager.VirtualAxis m_SteerAxis;
private void OnEnable()
{
if (mapping.type == AxisMapping.MappingType.NamedAxis)
{
m_SteerAxis = new CrossPlatformInputManager.VirtualAxis(mapping.axisName);
CrossPlatformInputManager.RegisterVirtualAxis(m_SteerAxis);
}
}
private void Update()
{
float angle = 0;
if (Input.acceleration != Vector3.zero)
{
switch (tiltAroundAxis)
{
case AxisOptions.ForwardAxis:
angle = Mathf.Atan2(Input.acceleration.x, -Input.acceleration.y)*Mathf.Rad2Deg +
centreAngleOffset;
break;
case AxisOptions.SidewaysAxis:
angle = Mathf.Atan2(Input.acceleration.z, -Input.acceleration.y)*Mathf.Rad2Deg +
centreAngleOffset;
break;
}
}
float axisValue = Mathf.InverseLerp(-fullTiltAngle, fullTiltAngle, angle)*2 - 1;
switch (mapping.type)
{
case AxisMapping.MappingType.NamedAxis:
m_SteerAxis.Update(axisValue);
break;
case AxisMapping.MappingType.MousePositionX:
CrossPlatformInputManager.SetVirtualMousePositionX(axisValue*Screen.width);
break;
case AxisMapping.MappingType.MousePositionY:
CrossPlatformInputManager.SetVirtualMousePositionY(axisValue*Screen.width);
break;
case AxisMapping.MappingType.MousePositionZ:
CrossPlatformInputManager.SetVirtualMousePositionZ(axisValue*Screen.width);
break;
}
}
private void OnDisable()
{
m_SteerAxis.Remove();
}
}
}
namespace UnityStandardAssets.CrossPlatformInput.Inspector
{
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof (TiltInput.AxisMapping))]
public class TiltInputAxisStylePropertyDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
float x = position.x;
float y = position.y;
float inspectorWidth = position.width;
// Don't make child fields be indented
var indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;
var props = new[] {"type", "axisName"};
var widths = new[] {.4f, .6f};
if (property.FindPropertyRelative("type").enumValueIndex > 0)
{
// hide name if not a named axis
props = new[] {"type"};
widths = new[] {1f};
}
const float lineHeight = 18;
for (int n = 0; n < props.Length; ++n)
{
float w = widths[n]*inspectorWidth;
// Calculate rects
Rect rect = new Rect(x, y, w, lineHeight);
x += w;
EditorGUI.PropertyField(rect, property.FindPropertyRelative(props[n]), GUIContent.none);
}
// Set indent back to what it was
EditorGUI.indentLevel = indent;
EditorGUI.EndProperty();
}
}
#endif
}
function Update()
{
// Orient an object to point northward.
transform.rotation = Quaternion.Euler(0, -Input.compass.trueHeading, 0);
}
using UnityEngine;
public class MoveWithCompass : MonoBehaviour
{
private double _lastCompassUpdateTime = 0;
private Quaternion _correction = Quaternion.identity;
private Quaternion _targetCorrection = Quaternion.identity;
private Quaternion _compassOrientation = Quaternion.identity;
void Start()
{
Input.gyro.enabled = true;
Input.compass.enabled = true;
}
void Update()
{
// The gyro is very effective for high frequency movements, but drifts its
// orientation over longer periods, so we want to use the compass to correct it.
// The iPad's compass has low time resolution, however, so we let the gyro be
// mostly in charge here.
// First we take the gyro's orientation and make a change of basis so it better
// represents the orientation we'd like it to have
Quaternion gyroOrientation = Quaternion.Euler (90, 0, 0) * Input.gyro.attitude * Quaternion.Euler(0, 0, 90);
// See if the compass has new data
if (Input.compass.timestamp > _lastCompassUpdateTime)
{
_lastCompassUpdateTime = Input.compass.timestamp;
// Work out an orientation based primarily on the compass
Vector3 gravity = Input.gyro.gravity.normalized;
Vector3 flatNorth = Input.compass.rawVector -
Vector3.Dot(gravity, Input.compass.rawVector) * gravity;
_compassOrientation = Quaternion.Euler (180, 0, 0) * Quaternion.Inverse(Quaternion.LookRotation(flatNorth, -gravity)) * Quaternion.Euler (0, 0, 90);
// Calculate the target correction factor
_targetCorrection = _compassOrientation * Quaternion.Inverse(gyroOrientation);
}
// Jump straight to the target correction if it's a long way; otherwise, slerp towards it very slowly
if (Quaternion.Angle(_correction, _targetCorrection) > 45)
_correction = _targetCorrection;
else
_correction = Quaternion.Slerp(_correction, _targetCorrection, 0.02f);
// Easy bit :)
transform.rotation = _correction * gyroOrientation;
}
}
using UnityEngine;
using System.Collections;
public class GyroCamera : MonoBehaviour {
Quaternion initialRotation;
Quaternion gyroInitialRotation;
bool gyroEnabled;
void Start () {
initialRotation = transform.rotation;
Input.gyro.enabled = true;
gyroInitialRotation = Input.gyro.attitude;
}
void Update() {
if(gyroEnabled){
#if !UNITY_EDITOR
Quaternion offsetRotation = ConvertRotation(Quaternion.Inverse(gyroInitialRotation) * Input.gyro.attitude);
transform.rotation = initialRotation * offsetRotation;
#else
//for unity editor contorl
float speed = 2.0f;
transform.Rotate(Input.GetAxis("Mouse Y") * speed, Input.GetAxis("Mouse X") * speed, 0);
#endif
}
}
public void AlignGyro() {
gyroEnabled = false;
transform.rotation = Quaternion.identity;
}
public void StartGyro() {
initialRotation = transform.rotation;
gyroInitialRotation = Input.gyro.attitude;
gyroEnabled = true;
}
private static Quaternion ConvertRotation(Quaternion q)
{
return new Quaternion(q.x, q.y, -q.z, -q.w);
}
}
Three Spheres:
Argos LatLong Hex
Argos Voronoi
Argos Fibonacci
—————————————————
Build for Android HandHeld
Build for Android GearVR


