メインコンテンツまでスキップ
バージョン: 0.23.2

天気情報の表示

概要

このサンプルは、地図上の地点の天気を表示します。

詳細

カテゴリ

  • 天気

MiRZAに載せる上での特徴

  • 天気情報を取得する地点の指定方法で、スマートフォン(ホストコントローラー)をポインターとして使用しています。

使用技術

ユースケース

  • 天気予報

お問い合わせ先

Unityプロジェクトのセットアップ

1. Snapdragon Spaces SDKのインポート

  1. まだ、Snapdragon Spaces SDKをインポートしていない場合はインポートします。

  2. 以下のサンプルのパッケージもインポートする必要があります。

2. QONOQサンプルのインポート

  1. 以下のUnityパッケージをダウンロードします。

  2. ダウンロードしたUnityパッケージをUnityEditorのProjectタブにドラッグ&ドロップします。

  3. サンプルがUnityプロジェクトにインポートされます。

3. 依存パッケージのインポート

Newtonsoft.Jsonのインポート

  1. Window > PackageManagerを開きます。
  2. 左上の+▼ボタンから、「Add package from git URL...」を選択します。
  3. URLの欄に、com.unity.nuget.newtonsoft-jsonを入力して「Add」を選択します。
  4. Newtonsoft.Jsonが、Unityプロジェクトにインポートされます。

4. シーンのセットアップ

  1. UnityEditorの[Edit] > [Project Settings] > [XR Plug-in Management] > [OpenXR (Androidタブ)][Meta Quest Support]歯車マークをクリックします。
     

  2. Force Remove Internet Permission」を無効にします。  

WARNING

UnityEditor上でスクリプトのコンパイルがされるたびに、「Force Remove Internet Permission」は、自動で有効化されてしまいます。ビルドする直前にその都度無効化する必要があります

有効化されてしまっている場合は、Projec Validationタブにて警告されるため、[Fix]をクリックすることでも、無効化出来ます。

  1. ProjectのAssets/Samples/QONOQ/Scenes/Weather/Weatherシーンを選択します。

  2. シーンをビルドします。

アプリの使用方法

  1. 地図上で、天気情報を取得したい地点にポインターを向けます。
  2. タッチパッドを押すことで、その地点の天気情報の取得が始まります。

アプリが正常に動作しない場合

サンプルの仕組み

天気情報の取得

  • 天気の取得にはOpen-Meteoを使用しています。 (Weather data by Open-Meteo.com)
    • HTTPリクエストを行うことで、天気情報をJSON形式で取得できます。
    • シーン上では、以下のような緯度経度情報を含んだURLをHTTPリクエストすることで、その場所の天気情報を取得しています。
      https://api.open-meteo.com/v1/forecast?latitude=35.689&longitude=139.692&current=temperature_2m,weather_code&timezone=Asia%2FTokyo

地図上の座標から緯度経度への変換

事前に使用している日本地図の北東と南西の2点の緯度経度を設定しておくことで、ピンが指す位置の緯度経度を比率から計算しています。

ホストコントローラー(スマートフォン)によるポインターの操作

ポインターの位置について

  • AR Session Origin > Spaces Simple Interaction > Controller Manager > Host Controller PointerオブジェクトからRaycastを行い、地図上の衝突した地点の座標を利用しています。 alt text

ポインターによる選択について

  • ポインターによる選択には、スマートフォンのタッチパッドを押したかの判定を利用しています。
    WeatherInfoManager.cs内では、以下のようにOnTriggerActionがスマートフォンのタッチパッドを押した際に実行されるように実装されています。
TriggerAction.action.performed += OnTriggerAction;