Unity Monthly Tech Talk 7월
- 유니티 애플리케이션의 안드로이드 ANR(Application Not Responding) 오류를 줄이는 팁과 사례
- Untiy Sentis: HuggingFace의 샘플을 활용하여 간단한 온디바이스 음성인식 게임을 만들어보기
유니티 애플리케이션의 안드로이드 ANR(Application Not Responding) 오류를 줄이는 팁과 사례
일반적인 ANR 원인
- Ads
- 서드파티 패키지
- 네이티브 코드
- 저사양 기기
- 웹뷰
ANR 로그
at android.os.MessageQueue.nativePollOne(Native method)
: ANR이 발생했다는 뜻으로 추가적인 정보는 없음- Input Dispatching Timed Out: 입력이 들어간 후 응답 타임아웃 발생
- Content Provider Timeout, Service Timeout, Broadcast Timeout: 주로 다른 스레드 끝나기 기다릴 때 발생
제안
- 패키지를 한꺼번에 초기화하지 말고 하나씩 초기화하기
- 모든 서드파티 패키지를 점검하기
- onPause와 관련된 긴 실행 프로세스를 주의
- 백그라운드에서 긴 프로세스를 실행하면 ANR을 유발함
- CPU와 메모리 사용량을 확인
- UnityPlayerForActivityOrService.SynchronizationTimeout.setTimeoutForAll 설정을 확인 (java)
- 우선적으로 권장하는 방법은 아님
- 불필요한 저사양 기기에 대한 지원 중단 고려
디버깅 전략
- 심볼 파일을 게임과 함께 업로드
- 개발자 옵션을 활성화하고 다음 설정
- 엄격 모드 사용 (struct mode)
- 충돌 다이얼로드 항상 표시
- 백그라운드 ANR 표시
- ANR이 가장 많이 발생한 버전간 변경 사항을 확인
- Backtrace와 같은 로깅 소프트웨어를 사용
- 브레드크럼, 워치독, 인스턴트 업데이트, 구성 가능한 필터를 제공
Firebase Test Lab: 테스트 자동으로 수행
안드로이드의 새로운 Activity인 GameActivity를 사용 (유니티 2023+)
Untiy Sentis: HuggingFace의 샘플을 활용하여 간단한 온디바이스 음성인식 게임을 만들어보기
Sentis 특징
- 멀티플랫폼
- 온디바이스
ML Agent
- Huggy 라는 샘플 프로젝트 통해 확인할 수 있음 (Hugging face의 how huggy works)
Hugging Face 샘플로 Training data 생성용으로 사용도 가능!
샘플들을 활용하여 간단한 예제를 만들어 보기
LLaMa3:8B는 로컬에서 추론할 수 있는 LLM
핸드 랜드마크 모델은 구글의 mediapipe를 사용한 것인데 텐서플로우로 되어 있어서 onnx로 변환해서 사용하였음
묵찌빠는 다음과 같이 트레이닝을 함. 핸드 랜드마크의 21개 랜드마크 좌표를 가지고 0~2(묵찌빠)로 classification.
여기에 C#에서 softmax 레이어를 추가해서 추론 진행
대화가 가능한 AI NPC 만들기
RAG
- LLM의 Fine-tuning이 필요하지 않음
- 환각증상(Hallucination)을 줄여줌
- 실시간 정보를 검색하여 처리 가능
- 효율적으로 Prompt 입력 길이를 관리
Speech To Text Model
Sentence Embedding Model
Cosine Similarity: 문장 유사도 계산
LLM: 문장 생성
LLM Prompt
Text To Speech Model
AI 갤러리 만들기
Hugging Face Inference API를 사용해서 구현
Stable Diffusion XL 모델을 사용: SDXL 1.0-base (약 7GB)
무료로 사용할 수 있지만 유료를 더 좋을것임
Hugging Face API package를 Unity에 설치해야 함