Unity iOS/Android를 사용하여 위치 정보 얻기
Unity 공식 위치 정보 가져오기 예제 코드
Unity 공식 위치 정보 가져오기 예제 코드의 평론 번역은 다음과 같다.
이 코드도 위치 정보를 얻을 수 있지만 유니티의 위치 정보를 관리하는 취득 클래스LocationService는 너무 간단하다. iOS/Android의 위치 정보 취득 가능 상태에 따라 어떤 행동을 하는지 문서에서 알 수 없다. 본 보도는 모바일 컴퓨터에서 그 부근을 확인한다.using UnityEngine;
using System.Collections;
public class TestLocationService : MonoBehaviour
{
IEnumerator Start()
{
// 最初に、ユーザーがロケーションサービスを有効にしているかを確認する。無効の場合は終了する
if (!Input.location.isEnabledByUser)
yield break;
// 位置を取得する前にロケーションサービスを開始する
Input.location.Start();
// 初期化が終了するまで待つ
int maxWait = 20; // タイムアウトは20秒
while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
{
yield return new WaitForSeconds(1); // 1秒待つ
maxWait--;
}
// サービスの開始がタイムアウトしたら(20秒以内に起動しなかったら)、終了
if (maxWait < 1)
{
print("Timed out");
yield break;
}
// サービスの開始に失敗したら終了
if (Input.location.status == LocationServiceStatus.Failed)
{
print("Unable to determine device location");
yield break;
}
else
{
// アクセスの許可と位置情報の取得に成功
print("Location: " + Input.location.lastData.latitude + " "
+ Input.location.lastData.longitude + " "
+ Input.location.lastData.altitude + " "
+ Input.location.lastData.horizontalAccuracy + " "
+ Input.location.lastData.timestamp);
}
// 位置の更新を継続的に取得する必要がない場合はサービスを停止する
Input.location.Stop();
}
}
작업 환경
using UnityEngine;
using System.Collections;
public class TestLocationService : MonoBehaviour
{
IEnumerator Start()
{
// 最初に、ユーザーがロケーションサービスを有効にしているかを確認する。無効の場合は終了する
if (!Input.location.isEnabledByUser)
yield break;
// 位置を取得する前にロケーションサービスを開始する
Input.location.Start();
// 初期化が終了するまで待つ
int maxWait = 20; // タイムアウトは20秒
while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
{
yield return new WaitForSeconds(1); // 1秒待つ
maxWait--;
}
// サービスの開始がタイムアウトしたら(20秒以内に起動しなかったら)、終了
if (maxWait < 1)
{
print("Timed out");
yield break;
}
// サービスの開始に失敗したら終了
if (Input.location.status == LocationServiceStatus.Failed)
{
print("Unable to determine device location");
yield break;
}
else
{
// アクセスの許可と位置情報の取得に成功
print("Location: " + Input.location.lastData.latitude + " "
+ Input.location.lastData.longitude + " "
+ Input.location.lastData.altitude + " "
+ Input.location.lastData.horizontalAccuracy + " "
+ Input.location.lastData.timestamp);
}
// 位置の更新を継続的に取得する必要がない場合はサービスを停止する
Input.location.Stop();
}
}
각 OS의 위치 정보에 대한 라이센스 상태
iOS 및 Android에 대한 각 OS의 위치 정보에 대한 라이센스 상태는 아래에 나와 있습니다.
유니티에서 이 일대는 추상적이다.
iOS
LocationService에서 말한 바와 같이 다음과 같은 5가지 상태가 존재한다.
notDetermined
사용자는 응용 프로그램이 위치 정보 서비스를 사용할 수 있는지 선택하지 않았습니다.
이 상태는 위치 정보 확인 대화 상자가 표시되지 않았습니다.
iOS13.2.1의 위치 정보 확인 대화 상자
CLAuthorizationStatus
restricted
응용 프로그램에서 위치 정보 서비스를 사용할 수 없습니다.
사용자는 특별히 위치 정보 서비스 사용을 거부하지 않았지만, 어떤 이유로 사용할 수 없을 때는 반드시 이 상태에 있어야 한다.
"설정 > 프라이버시 > 위치 정보 서비스"에서 위치 정보 서비스를 닫은 경우 이 상태(iOS13.1.2를 통해 확인).
denied
사용자가 응용 프로그램의 위치 정보 서비스 사용을 거부하거나 설정에서 전역적으로 비활성화됩니다.
위치 정보 확인 대화 상자에서 거부 또는 [설정 > 프라이버시 > 위치 정보 서비스] 에서 [없음] 이 상태를 선택합니다.
authorizedAlways
사용자는 응용 프로그램이 언제든지 위치 정보 서비스를 시작할 수 있도록 허용한다.
위치 정보의 확인 대화 상자에서 [항상]을 선택하면 상태가 됩니다.응용 프로그램이 백그라운드에 있어도 응용 프로그램은 위치 정보를 얻을 수 있다.
authorizedWhenInUse
사용자 승인 응용 프로그램은 사용 중에 위치 정보 서비스를 시작합니다.
위치 정보의 확인 대화 상자에서 "사용 중만"을 선택하면 이 상태가 됩니다.응용 프로그램이 프론트 데스크톱인 상태에서만 응용 프로그램이 위치 정보를 얻을 수 있다.
Android
다음 세 가지 상태가 있습니다.
선택되지 않음, 한 번만 거부
사용자는 응용 프로그램에서 위치 정보를 사용할 수 있는지 선택하지 않았습니다.
또는 응용 프로그램에서 위치 정보를 사용할 수 없습니다.
이 상태는 위치 정보 확인 대화 상자가 표시되지 않았습니다.
또는 위치 정보에 대한 확인 대화 상자에서 거부된 상태를 선택합니다.
Activity.requestPermissions
허락
사용자는 응용 프로그램에서 위치 정보 서비스를 사용할 수 있습니다.
위치 정보에 대한 확인 대화 상자에서 라이센스가 선택된 상태입니다.
거부하다
응용 프로그램에서 위치 정보를 사용할 수 없습니다.
위치 정보에 대한 확인 대화 상자에서 향후 표시되지 않음을 선택한 상태입니다.
Activity. onRequestPermissionsResult
위치 정보를 얻을 수 있는 모든 동작 정보
LocationService.isEnabledByUser
사용자가 위치 정보 서비스를 사용할지 여부입니다.
iOS
'설정 > 프라이버시 > 위치 정보 서비스'에서 위치 정보 서비스를 닫을 때 가짜로 돌아갑니다.
위치 정보 허용 여부와 무관합니다.
상태
LocationService.isEnabledbyUser의 반환 값
notDetermined
true
restricted
false
denied
true
authorizedAlways
true
authorizedWhenInUse
true
Android
상태
LocationService.isEnabledbyUser의 반환 값
선택되지 않음, 한 번만 거부
false
허락
true
거부하다
false
LocationService.Start
LocationService.isEnabledByUser
위치 정보 서비스의 업데이트를 시작합니다.
호출 LocationService.Start
후 LocationService.Start 이 LocationService.status 이면 LocationServiceStatus.Running 에서 위치 정보를 얻을 수 있습니다.
iOS
상태
LocationService.호출된 비헤이비어 시작
notDetermined
위치 정보의 확인 대화 상자를 표시합니다.
restricted
위치 정보를 사용할 수 있도록 위치 정보 서비스를 엽니다.LocationService.status는 Failed
입니다.
denied
LocationService.status는 Failed
입니다.
authorizedAlways
LocationService.status는 Running
입니다.
authorizedWhenInUse
LocationService.status는 Running
입니다.
위치 정보의 확인 대화 상자에서 라이센스를 선택한 경우 LocationService.status
는 Running
입니다.
위치 정보 서비스 열기 대화 상자
LocationService.lastData
Android
상태
LocationService.호출된 비헤이비어 시작
선택되지 않음, 한 번만 거부
위치 정보의 확인 대화 상자를 표시합니다.LocationService.status는 Stopped
, 허가를 선택할 때 LocationService.isEnabledByUser
진실로 유지됩니다.
허락
LocationService.status는 Running
입니다.
거부하다
LocationService.status는 Stopped
입니다.
위치 정보의 확인 대화 상자에서 라이센스를 선택하더라도 LocationService.isEnabledByUser
실제 상태는 변경되지 않습니다.
위치 정보를 얻은 경우 다시 호출해야 합니다LocationService.status
.
LocationService.Stop
위치 정보 서비스의 업데이트를 중지합니다.
iOS/Android
LocationService.Start
은LocationService.status
입니다.Stopped
의 값이 더 이상 업데이트되지 않습니다.
총결산
LocationService.lastData
만 봐도 "설정 > 프라이버시 > 위치 정보 서비스"가 켜져 있는지 꺼져 있는지 알 수 있습니다 LocationService.isEnabledByUser
의 행동으로만 판정할 수 있다.LocationService.Start
시 OS에 위치 정보를 얻을 수 있는 대화 상자가 표시됩니다.LocationService.Start
를 보면 안드로이드가 응용 프로그램의 위치 정보를 얻을 수 있는지 알 수 있다LocationService.isEnabledByUser
false인 경우), 위치 정보 허가 대화상자를 표시할지 여부를 미리 알 수 없습니다.호출LocationService.isEnabledByUser
시 OS에 위치 정보를 얻을 수 있는 대화 상자가 표시됩니다.LocationService.Start
을 바탕으로 LocationService.Start
의 값이 어떻게 되는지 감시할 수 밖에 없다.코드
참고 자료
Reference
이 문제에 관하여(Unity iOS/Android를 사용하여 위치 정보 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirano/items/dde92f4ed76fb377746e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)