Unity에서 모바일 앱/게임 제작 시 네크워크, 카메라, 저장소 접근 등
특정 작업을 하기 위해선 Manifest에 선언하는 작업을 해야한다.
✅ 1. INTERNET
📌 Manifest 선언
<uses-permission android:name="android.permission.INTERNET" />
🧠 설명
Firebase, REST API, UnityWebRequest 등 모든 네트워크 통신에 필수 권한이야.
권한 요청 UI 없이 자동 적용됨.
💻 Unity 코드 예시
using UnityEngine.Networking;
IEnumerator SendData()
{
UnityWebRequest request = UnityWebRequest.Get("https://api.example.com/data");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log("받은 데이터: " + request.downloadHandler.text);
}
else
{
Debug.LogError("오류: " + request.error);
}
}
✅ 2. ACCESS_NETWORK_STATE
📌 Manifest 선언
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
🧠 설명
기기가 인터넷에 연결되었는지 확인할 때 필요. 예: 자동 로그인, 알림 전송 시 체크.
💻 Unity 코드 예시
if (Application.internetReachability == NetworkReachability.NotReachable)
{
Debug.Log("인터넷 연결 안 됨");
}
else
{
Debug.Log("인터넷 연결 가능");
}
✅ 3. READ_EXTERNAL_STORAGE (Android 10 이하)
📌 Manifest 선언
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
🧠 설명
갤러리에서 이미지 가져오기, 외부 저장소의 파일을 읽을 때 필요.
Android 11 이상은 Scoped Storage 방식으로 변경되어 별도 접근 필요.
💻 Unity 코드 예시 (갤러리 이미지 불러오기)
NativeGallery.GetImageFromGallery((path) =>
{
if (!string.IsNullOrEmpty(path))
{
Texture2D tex = new Texture2D(2, 2);
tex.LoadImage(File.ReadAllBytes(path));
// UI 적용
}
});
✅ 4. CAMERA
📌 Manifest 선언
<uses-permission android:name="android.permission.CAMERA" />
🧠 설명
AR 앱, 얼굴 인식, QR 코드 스캔 등에서 카메라 직접 접근 시 필요.
Unity AR Foundation, OpenCV 등에서도 필요함.
💻 Unity 코드 예시 (AR 카메라)
if (!Permission.HasUserAuthorizedPermission("android.permission.CAMERA"))
{
Permission.RequestUserPermission("android.permission.CAMERA");
}
Unity에서는 Android 6.0 이상에서 사용자 동의 필요함
✅ 5. POST_NOTIFICATIONS (Android 13 이상)
📌 Manifest 선언
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
🧠 설명
Android 13부터 푸시 알림 권한은 사용자 동의가 필요해짐.
Firebase Cloud Messaging(FCM)을 사용하는 경우 반드시 필요.
💻 Unity 코드 예시
#if UNITY_ANDROID && !UNITY_EDITOR if (!Permission.HasUserAuthorizedPermission("android.permission.POST_NOTIFICATIONS")) { Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS"); } #endif
✅ 6. ACCESS_FINE_LOCATION
📌 Manifest 선언
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
🧠 설명
GPS 기반으로 사용자 위치를 가져올 때 필요.
AR 위치 기반 앱, 위치 기반 알림 등에 사용.
💻 Unity 코드 예시
IEnumerator StartLocation()
{
if (!Input.location.isEnabledByUser)
{
Debug.Log("위치 서비스 꺼져 있음");
yield break;
}
Input.location.Start();
int maxWait = 10;
while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
{
yield return new WaitForSeconds(1);
maxWait--;
}
if (Input.location.status == LocationServiceStatus.Running)
{
Debug.Log("위도: " + Input.location.lastData.latitude);
}
else
{
Debug.Log("위치 서비스 사용 불가");
}
Input.location.Stop();
}
✅ 7. RECORD_AUDIO
📌 Manifest 선언
<uses-permission android:name="android.permission.RECORD_AUDIO" />
🧠 설명
음성 인식, 마이크 녹음 기능 사용 시 필요.
예: 캐릭터 음성 입력, 인터뷰 저장 등.
💻 Unity 코드 예시
if (Microphone.devices.Length > 0) { AudioClip audio = Microphone.Start(null, true, 10, 44100); Debug.Log("녹음 시작됨"); }
✅ 요약
권한 | 기능 | Manifest 선언 | 사용자 요청 필요? |
INTERNET | 인터넷 통신 | ✅ | ❌ |
ACCESS_NETWORK_STATE | 네트워크 상태 확인 | ✅ | ❌ |
READ_EXTERNAL_STORAGE | 이미지 불러오기 | ✅ | ✅ |
CAMERA | 카메라 사용 | ✅ | ✅ |
POST_NOTIFICATIONS | 알림 표시 | ✅ | ✅ (Android 13+) |
ACCESS_FINE_LOCATION | 위치 정보 | ✅ | ✅ |
RECORD_AUDIO | 마이크 녹음 | ✅ | ✅ |
✅ 예외: 사용자에게 권한 요청이 필요한 것들
아래 권한은 Android 6.0 (API 23) 이상부터는 **사용자 동의(Permission.RequestUserPermission)**가 필요하다.
그리하여 Unity 내에서 명시적으로 요청해야 작동함.
* 사용자에게 어떤 권한을 허용할지 안 할지 팝업을 띄우는 코드
if (!Permission.HasUserAuthorizedPermission("android.permission.CAMERA"))
{
Permission.RequestUserPermission("android.permission.CAMERA");
}
'Unity' 카테고리의 다른 글
Unity 로딩씬 구현하기 (0) | 2025.04.14 |
---|---|
Unity 자동슬라이드 Text 구현하기 (0) | 2025.04.14 |
Unity 출석체크 시스템 구현하기 (2) | 2025.04.08 |
Unity 푸시 알람 기능 구현 (0) | 2025.03.31 |
오클루전 컬링 (0) | 2024.10.26 |