9 private float androidMagneticDeclination;
11 public override string Name =>
"UnityLocationProvider";
13 public override bool IsCompassEnabled => Input.compass.enabled;
19 Input.compass.enabled =
true;
27 protected override void InnerOnEnabled()
29 androidMagneticDeclination = AndroidMagneticDeclination.GetDeclination(
CurrentLocation.ToLocation());
35 switch (Input.location.status)
37 case LocationServiceStatus.Initializing:
38 Status = LocationProviderStatus.Initializing;
41 case LocationServiceStatus.Failed:
42 Status = LocationProviderStatus.Failed;
45 case LocationServiceStatus.Running:
46 Status = LocationProviderStatus.Started;
49 case LocationServiceStatus.Stopped:
50 Status = LocationProviderStatus.Idle;
62 var data = Input.location.lastData;
66 latitude = data.latitude,
67 longitude = data.longitude,
68 altitude = data.altitude,
69 accuracy = data.horizontalAccuracy,
71 timestamp = (long)(data.timestamp * 1000)
83 var magneticHeading = Input.compass.magneticHeading;
86 var trueHeading = Input.compass.trueHeading;
89 var tiltCorrectedMagneticHeading = GetMagneticHeading();
90 magneticHeading = tiltCorrectedMagneticHeading;
91 trueHeading = tiltCorrectedMagneticHeading + androidMagneticDeclination;
101 heading = trueHeading,
102 magneticHeading = magneticHeading,
103 accuracy = Input.compass.headingAccuracy,
104 timestamp = (long)(Input.compass.timestamp * 1000),
105 isMagneticHeadingAvailable = Input.compass.enabled
109 private float GetMagneticHeading()
112 if (!SystemInfo.supportsGyroscope || !ApplyCompassTiltCompensationOnAndroid || androidNativeCompass ==
null)
114 return Input.compass.magneticHeading;
117 return androidNativeCompass.GetMagneticHeading();
129 return Input.compass.magneticHeading;