2021. 1. 20. 21:45ㆍ뚝딱뚝딱 만들기 Devlog/프로젝트 Devlog
지난번에 이어서 이번에는 유니티로 옮기는 과정입니다.
1. ardity 설치
유니티에서 아두이노 데이터를 읽어오는 방법이 있는데, 시리얼 포트를 유니티가 사용할 수 있습니다.
arduino 개발 툴에서 시리얼 모니터에 해당하는 기능이 있는 셈입니다.
이거를 편하게 해주는 게 바로 ardity입니다.
ardity를 asset store에서 찾아서 받았습니다.
Assets 폴더에 있는 Ardity\Scripts\Samples\SampleUserPolling_ReadWrite.cs와
Ardity\Scripts\SerialController.cs를 잘 보면 대충 감이 옵니다. (SampleUserPolling_ReadWrite만 봐도 될 것 같아요)
-Serial Controller
우선 Serial Controller 컴포넌트를 어딘가에 달아줘야 합니다.
저는 serial이라는 빈 오브젝트에 달아줬습니다.
그리고 여기에 포트명(저의 경우 COM3)과 시리얼 통신 속도(저의 경우 115200)을 적어주면 됩니다.
여기서 Message Listener에 오브젝트를 넣으면 시리얼 통신으로 데이터를 받을 때 콜백 함수를 실행해줍니다.
OnCollisionEnter처럼 OnMessageArrived를 사용할 수 있습니다.
저는 일단 콜백을 안 쓰고 하기로 했습니다.
-시리얼 통신
시리얼 통신 중 송신은 시리얼 모니터 입력창에 쓰는 거랑 동일한 기능입니다.
아까 만들어둔 SerialController 컴포넌트에서 SendSerialMessage를 실행해주면 됩니다.
아래 코드는 A를 누르면 A를, Z를 누르면 Z를 시리얼 통신으로 입력하는 부분입니다.
시리얼 통신 중 수신은 시리얼 모니터에 나오는 것을 한 줄 단위로 읽습니다.
여기서 주의할 점은 너무 빠른 속도로 많은 메세지가 수신되면 몇 개의 메세지는 드랍됩니다.
위와 비슷한 방법으로 Serial Controller에 ReadSerialMessage를 실행해주면 시리얼 출력 한 줄을 반환해줍니다.
아래 코드는 시리얼 통신으로 받은 메세지를 전부 "Message arrived : 출력내용"의 형식으로 출력해주는 부분입니다.
2. 움직이는 손 만들기
위 예제를 참고해서 자이로센서에 따라 게임오브젝트가 회전하는 기능을 만들었습니다.
읽어온 메세지를 split해서 회전벡터로 가공해 hand오브젝트에게 넘겨주는 방식입니다.
벡터에 들어간 순서가 2,0,1이고 x에는 -가 붙어있는 건 그대로 넣으면 이상하게 돼서 맞게 수정했습니다.
여기서 hand는 HandController 컴포넌트이고, FeedVector은 받아온 벡터를 그대로 rotation에 적용합니다.
HandController 컴포넌트는 나중에 손 역할을 해줄 큐브에 우선 달아줬습니다.
추가로 자이로센서를 수평으로 둬도 이상한 각도로 기울어진 큐브가 나와서 영점을 맞춰주는 기능을 추가했습니다.
여기에 R을 누르면 영점을 다시 잡아주는 기능도 만들었습니다.
여기까지 했을 때 아주 괜찮은 결과물이 나와서 행복했습니다.
영상 후반부를 보면 센서랑 큐브 회전이 일치하지 않는데, 이게 바로 그 말로만 듣던 드리프트 현상입니다.
하루빨리 고쳐야겠어요.
'뚝딱뚝딱 만들기 Devlog > 프로젝트 Devlog' 카테고리의 다른 글
심리테스트 만들기 (3) 결과물 (2) | 2021.03.03 |
---|---|
심리테스트 만들기 (2) 화면 구성하기 (0) | 2021.02.24 |
심리테스트 만들기 (1) git page 만들기 (0) | 2021.02.19 |
손으로 하는 테트리스 만들기 (3) SRS 시스템, 프로젝트 중단 (0) | 2021.02.01 |
손으로 하는 테트리스 만들기 (1) 자이로센서는 어려워 (0) | 2021.01.19 |