desiredAccuracyInMeters | 希望使用的服务精度,单位为米。这会明确设备最近位置坐标的精度。500 之类的高值不要求设备使用其 GPS 芯片,从而节省电池电量。5-10 之类低值提供最佳精度,但需要使用 GPS 芯片,从而消耗更多电池电量。默认值为 10 米。 |
updateDistanceInMeters | 在 Unity 更新Input.location之前,设备必须横向移动的最小距离,单位为米。500 之类的高值会减少更新频次,并且处理起来消耗的资源更少。默认值为 10 米。 |
启动位置服务更新。
调用此函数后,可以通过选中Input.location中的lastData访问设备最近的位置坐标。
注意:位置服务并不会立即开始发送位置数据。因此,请在Input.location中检查当前服务状态。
在 Android 设备上,脚本中使用此方法会自动将ACCESS_FINE_LOCATION
权限添加到 Android 清单中。如果使用 500 或更高之类的低精度值,请在Player Settings中选择低精度位置,以添加ACCESS_COARSE_LOCATION
权限。
在 WebGL 设备上,此方法必须在协程中作为对用户手势(如鼠标点击)的响应而调用。注意:地理位置服务仅在 HTTPS 连接下可用,在开发过程中使用 http://localhost 时除外。desiredAccuracyInMeters
和updateDistanceInMeters
的使用不受支持,因为用户设备确定这两个值。
using UnityEngine; using System.Collections;
public class TestLocationService : MonoBehaviour { IEnumerator Start() { // Check if the user has location service enabled. if (!Input.location.isEnabledByUser) Debug.Log("Location not enabled on device or app does not have permission to access location");
// Starts the location service. Input.location.Start();
// Waits until the location service initializes int maxWait = 20; while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) { yield return new WaitForSeconds(1); maxWait--; }
// If the service didn't initialize in 20 seconds this cancels location service use. if (maxWait < 1) { Debug.Log("Timed out"); yield break; }
// If the connection failed this cancels location service use. if (Input.location.status == LocationServiceStatus.Failed) { Debug.LogError("Unable to determine device location"); yield break; } else { // If the connection succeeded, this retrieves the device's current location and displays it in the Console window. Debug.Log("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp); }
// Stops the location service if there is no need to query location updates continuously. Input.location.Stop(); } }