True Weather - Unity Asset Store - Nephasto

Accede a información meteorológica y de geolocalización en tiempo real con 'True Weather'.

🕹️ Demo  🛒 Store

Configuración

Lo primero que debes hacer es crear un nuevo Game Object en una escena y añadirle el componente ‘True Weather’. Solo debe existir una única instancia del componente en tu escena.

Una vez añadido verás algo como esto:

 

En ‘Units’ (1) puedes seleccionar el sistema métrico que quieres usar: Metric (International System of Units o SI) o Imperial.

Si ‘Try GPS first’ (2) está activo, el servicio de geolocalización intentará usar hardware GPS. Esto normalmente solo es posible es dispositivos móviles y si la aplicación tiene los permisos para usarlo. Si está disponible, este modo puede ahorrar batería.

Solo se activa el GPS durante la consulta y se usa el modo con menos precisión (~500 metros).

Si esta opción no está activa, o no está disponible, se usará el servicio web ipap.co. Este servicio no requiere registrase para usarlo para menos de 1000 consultar al día. De todas formas te recomiendo registrarte cuando tu juego sea público. Una vez que te registres, te proporcionarán una clave que debes poner en ‘API Key’ (3).

Para obtener datos meteorológicos, puedes usar los servicios webs de openweathermap.com (datos básicos) o de climacell.co (datos extras). Selecciona el que quieras usar en ‘Service’ (4).

Ambos servicios requieren registro web, incluso para su uso gratuito. En el caso de openweathermap.com necesitas darte de alta en su servicio ‘Current weather’. Si eliges climacell.co debes darte de alta en su servicio ‘Weather API’. La clave que os proporcionen, la debes poner en ‘API Key’ (5).

¿Quieres usar otro servicio? Aquí tienes algunos de los mejores servicios actuales, dime cuál quieres usar y lo incluiré en un update.

Uso

Todo el código está dentro del namespace ‘Nephasto.TrueWeatherAsset’ y el principal componente es ‘TrueWeather’. Lo primero que debes hacer es importar el namespace:

1
 using Nephasto.TrueWeatherAsset;

 

Si ya has creado en el Editor un Game Object con el componente ‘TrueWeather’, puedes acceder a él así:

1
 TrueWeather trueWeather = FindObjectOfType<TrueWeather>();

 

Para detectar el tiempo actual debes llamar a la función ‘Detect()’. Como la información puede tardar unos segundos en estar disponible, debes usar una Action como parámetro que será ejecutado cuando se termine la consulta. Por ejemplo, si quieres sacar un mensaje por la consola con la temperatura sería algo como esto:

1
2
3
4
5
6
7
 trueWeather.Detect(WeatherRequests.Meteorology, (success, errorMsg) =>
 {
   if (success == true)
     Debug.Log($"Temperature: {trueWeather.Weather.Temperature} {trueWeather.Units == Units.Metric ? "C" : "F"}.");
   else
     Debug.LogError($"Error: {errorMsg}.");
 });

 

Una vez que se llame a la Action sin errores, puedes acceder a la geolocalización con la propiedad ‘Location’ y a la información meteorológica con ‘Weather':

1
2
3
4
5
6
7
8
9
 float latitude = trueWeather.Location.Latitude;
 float longitude = trueWeather.Location.Longitude;

 string description = trueWeather.Weather.Description;
 float temperature = trueWeather.Weather.Temperature;
 float pressure = trueWeather.Weather.Presure;
 float humifity = trueWeather.Weather.Humidity;
 DateTime sunrise = trueWeather.Weather.Sunrise;
 DateTime sunset = trueWeather.Weather.Sunset;

 

Toda esta información estará disponible hasta la próxima vez que llames a ‘Detect()’. Para saber todos los datos que tienes disponibles puedes consultar los ficheros ‘Runtime/ILocation.cs’ (geolocalización) y ‘Runtime/WeatherService.cs’ (meteorología).

Algunos servicios proporcionan una información extra que puedes conocer casteando los datos genéricos al servicio usado. Si usas el servicio ipap.co para la geolocalización puedes acceder a los datos extra así:

1
2
3
4
5
6
7
8
9
 if (trueWeather.Location is IPAPILocation)
 {
   IPAPILocation ipAPILocation = (IPAPILocation)trueWeather.Location;

   string ip = ipAPILocation.IPAdress;
   string country = ipAPILocation.Country;
   string region = ipAPILocation.Region;
   string city = ipAPILocation.City;
 }

 

Consulta todos los datos extra disponibles mirando el fichero ‘Runtime/IPAPI/IPAPILocation.cs’.

Cuando usas el servicio de openweathermap.com puedes acceder a sus datos extra así:

1
2
3
4
5
6
7
 if (trueWeather.Weather is OpenWeatherMapService)
 {
   OpenWeatherMapService openWeatherMap = (OpenWeatherMapService)trueWeather.Weather;

   float tempMin = openWeatherMap.TemperatureMin;
   float tempMax = openWeatherMap.TemperatureMax;
 }

 

Consulta todos los datos extra disponibles en el fichero ‘Runtime/OpenWeatherMap/OpenWeatherMapService.cs’.

Si usas el servicio de climacell.co, lo puedes hacer así:

1
2
3
4
5
6
7
8
 if (trueWeather.Weather is ClimacellService)
 {
   ClimacellService climacell = (ClimacellService)trueWeather.Weather;

   MoonPhases moonPhase = climacell.MoonPhase;
   float visibility = climacell.Visibility;
   float solarRadiation = climacell.SolarRadiation;
 }

 

También puedes acceder a datos de la calidad del aire (no disponible usando openweathermap.com), de esta forma:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 trueWeather.Detect(WeatherRequests.AirQuality, (success, errorMsg) =>
 {
   if (success == true)
   {
     if (trueWeather.Weather is ClimacellService)
     {
       ClimacellService climacell = (ClimacellService)trueWeather.Weather;

       Debug.Log($"Air quality : {climacell.AirQuality} ppb.");
     }
   }
   else
     Debug.LogError($"Error: {errorMsg}");
 });

 

Consulta todos los datos extra disponibles mirando el fichero ‘Runtime/Climacell/ClimacellService.cs’.

Cualquier pregunta o sugerencia que tengas estaré encantado de responderla en

hello@nephasto.com