Как обновить gps в единстве? - PullRequest
0 голосов
/ 22 ноября 2018

Я сейчас работаю над игрой через Unity.Я делаю игру, используя Vuforia SDK.GPS-координаты требуются в игре, но GPS-координаты не обновляются.Странно то, что в одном приложении, которое использует код gps только для отображения координат на экране, координаты gps обновляются корректно, но если я добавлю этот же код в игру, координаты gps больше не будут обновляться в началеприложение.Я не думаю, что это проблема с кодом.Пожалуйста, помогите.

общедоступный класс GPSCheck: MonoBehaviour {

public static double first_Lat;
public static double first_Long;
public static double current_Lat;
public static double current_Long; 

private static WaitForSeconds second;

private static bool gpsStarted = false;

private static LocationInfo location;

private void Awake()
{
    second = new WaitForSeconds(1.0f);
}

IEnumerator Start()
{

    if (!Input.location.isEnabledByUser)
    {
        Debug.Log("GPS is not enabled");
        yield break;
    }


    Input.location.Start(5f, 10f);
    Debug.Log("Awaiting initialization");


    int maxWait = 20;
    while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
    {
        yield return second;
        maxWait -= 1;
    }

    if (maxWait < 1)
    {
        Debug.Log("Timed out");
        yield break;
    }


    if (Input.location.status == LocationServiceStatus.Failed)
    {
        Debug.Log("Unable to determine device location");
        yield break;

    }
    else
    {

        location = Input.location.lastData;
        first_Lat = location.latitude * 1.0d;
        first_Long = location.longitude * 1.0d;
        gpsStarted = true;


        while (gpsStarted)
        {
            location = Input.location.lastData;
            current_Lat = location.latitude * 1.0d;
            current_Long = location.longitude * 1.0d;
            yield return second;
        }
    }
}

public static void StopGPS()
{
    if (Input.location.isEnabledByUser)
    {
        gpsStarted = false;
        Input.location.Stop();
    }
}

}

1 Ответ

0 голосов
/ 22 ноября 2018

Первое: вы не запускаете свою сопрограмму.

Второе: избегайте использования метода Unity в качестве сопрограммы.

Попробуйте:

public static double first_Lat;
public static double first_Long;
public static double current_Lat;
public static double current_Long; 

private static WaitForSeconds second;

private static bool gpsStarted = false;

private static LocationInfo location;

private void Awake()
{
    second = new WaitForSeconds(1.0f);
}

private void Start()
{
    StartCoroutine(GSP());
}

private IEnumarator GSP()
{
    if (!Input.location.isEnabledByUser)
    {
        Debug.Log("GPS is not enabled");
        yield break;
    }


    Input.location.Start(5f, 10f);
    Debug.Log("Awaiting initialization");


    int maxWait = 20;
    while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
    {
        yield return second;
        maxWait -= 1;
    }

    if (maxWait < 1)
    {
        Debug.Log("Timed out");
        yield break;
    }


    if (Input.location.status == LocationServiceStatus.Failed)
    {
        Debug.Log("Unable to determine device location");
        yield break;

    }
    else
    {

        location = Input.location.lastData;
        first_Lat = location.latitude * 1.0d;
        first_Long = location.longitude * 1.0d;
        gpsStarted = true;


        while (gpsStarted)
        {
            location = Input.location.lastData;
            current_Lat = location.latitude * 1.0d;
            current_Long = location.longitude * 1.0d;
            yield return second;
        }
    }
}

public static void StopGPS()
{
    if (Input.location.isEnabledByUser)
    {
        gpsStarted = false;
        Input.location.Stop();
    }
}
...