Skip to content

Jongjunp/MADCAMP_WEEK3

Repository files navigation

몰입캠프 1주차 과제

목차

프로젝트 개요

목표

  • 이미지 처리 및 소켓통신을 이용하 AR 환경에서의 서바이벌 게임 구현

목적

  • OpenCV 사용하기
  • ARCore 사용하기
  • 현실적인 AR서비스 구현

사용 언어, 툴

  • JAVA
  • Kotlin
  • android studio
  • OpenCV
  • ARCore

세부 구현

SVO(위치 추적 알고리즘)

  • OpenCV와 ARCore를 이용하여 휴대폰 카메라 영상에서 플레이어의 상대 이동 궤적을 구하는 알고리즘. 궤적을 구하기 위해 이전프레임과 현재프레임에서 특징점을 추출하고 동일한 특징점을 구한 후 해당 점의 이동정도에 따라 휴대폰의 이동 궤적을 계산한다.

피격 판정

  • 먼저 각 클라이언트 휴대폰에서 발사 버튼을 눌렀을 때의 화면을 캡쳐하여 그 화면의 조준선 안에 사람의 머리 부분이 있는지 ML Kit으로 판별한다. 그리고 사람이 있으면 현재 핸드폰의 회전 각도를 SVO 알고리즘으로 quaternion 형태로 얻은 뒤 현재 핸드폰의 방위각과 고도로 변환해서 서버에 전송한다. 또한 이와 별개의 쓰레드로 0.5초마다 각 클라이언트에서 현재 위치가 서버에 전송되고 있다. 서버에 발사의 방위각과 고도에 대한 정보가 들어오면 서버는 각 참가자들의 위치와 발사자의 위치를 이용해 피격 후보들에 대한 방향 벡터를 구하고 방위각과 고도를 이용해 조준선의 방향 벡터를 구해서 둘 다 단위 벡터로 변환 후 내적 값이 너무 작은(일정 threshold보다 작은) 참가자들은 후보에서 제외한다. 그 후 남은 후보들 중 발사자와 가장 가까운 후보를 피격자로 판정한다.

소켓통신

  • SocketIO 라이브러리를 이용하여 실시간 통신을 통해 게임을 위한 방 생성 및 참가자 대기 기능과 게임 승리 및 패배 여부를 클라이언트로 전달하는 기능을 구현하였다. MessageData 클래스에 유저 이름, 방 이름, 유저 위치 정보와 피해자 정보를 담아 서버로 전송하고 이를 바탕으로 서버에서 데이터를 가공하여 json 형식으로 다시 클라이언트에게 데이터를 전송하는 방식으로 구현하였다. 서버에서 제공하는 데이터에 담긴 가해자 정보와 피해자 정보, 그리고 클라이언트 측의 정보를 비교하여 자신이 맞았을 때는 결과창으로 넘어가도록 설정했고, 자신이 다른 사람을 맞췄을 때는 kill number가 올라가도록 설정하였다. 제 3자끼리의 싸움의 결과는 Toast 메시지를 이용하여 제시해주었다.

구현 결과

1. 로그인 화면

로그인 화면

2. 방 생성/참가 화면

방 생성 및 참가 화면

3. 게임 준비 화면

게임 준비 화면

4. 게임 화면

게임 화면

5. 결과창

결과창

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •