2016년 6월 28일 화요일

아두니티(ARDUnity) 임포트 에러 해결

아두니티 에셋을 프로젝트에 임포트시키면 다음과 같은 에러가 대부분 나타나게 됩니다.

이 에러의 의미는 유니티에서 하드웨어 통신에 필요한 .Net SerialPort Class를 찾을 수 없다는 뜻입니다.

아두이노 보드와 PC를 연결하는 가장 기본적인 방법은 USB로 연결하는 것입니다.
Arduino IDE에서도 설정했었던 Serial Port는 아주 오래전부터 사용해온 PC와 외부 하드웨어 사이의 통신 방식입니다.
오래전 PC를 보면 RS-232 혹은 직렬(시리얼) 포트라는 커넥터가 있었습니다.

대부분의 하드웨어는 이 시리얼 포트를 통해 연결되고 PC 어플리케이션과 통신했습니다.
하지만, PC가 점차 슬림해지면서 이 시리얼 포트는 거추장하여 사라져갔고, USB로 병합되었습니다.
USB통신 방식은 시리얼 통신에 비해 프로그래밍이 까다로웠기 때문에 하드웨어 개발자들은 여전히 시리얼 통신을 선호했고, 그 결과 USB2Serial이란 컨버터가 등장하기 시작했습니다.

아두이노 보드에는 바로 이 USB2Serial 컨버터가 내장되어있기에, USB로 연결되었다 하더라도 OS상에서는 시리얼 포트로 잡히게 됩니다.
Windows에서는 시리얼 포트 이름을 COM1, COM2... 방식으로 매기며, Linux나 Mac의 경우는 dev/tty 혹은 dev/usbserial 등으로 매기게 됩니다.

어찌되었건 유니티와 아두이노 보드가 통신하기 위해서는 가장 기본적인 방식인 USB2Serial을 사용해야 하고, 이것은 유니티가 채용한 Mono(.Net)의 Serial Port Class를 통해 접근할 수 있습니다.
문제는 유니티의 기본 설정이 App의 용량을 줄이고자 게임에 필요한 핵심 기능만으로 구성된 .Net Subset이란 Light 버전을 사용하고 있다는 점입니다.
안타깝게도 .Net Subset엔 Serial Port가 빠져있기 때문에 Serial Port를 사용하는 C# 코드가 있는 경우 위와 같이 에러를 내보내는 것입니다.

이 문제를 해결하기 위해서는 .Net Subset이 아닌 .Net을 선택하도록 프로젝트 설정을 바꿔야 합니다.
우선, 이 옵션의 위치는 다음과 같습니다.
  1. 에디터 상단 메뉴 선택 (Edit->Project Settings->Player)
  2. Inspector View에서 'Others Settings' 탭을 찾는다.
  3. 'Optimization/API Compatibility Level' 항목을 찾는다.
  4. '.Net 2.0 Subset'을 '.Net 2.0'으로 바꾼다.


이 설정을 마치면 에러는 없어집니다.




아두니티는 시리얼 통신 뿐 아니라 Bluetooth나 WiFi같은 통신 방식도 지원합니다.
앞으로 이런 방식을 활용할 수 있는 방법을 설명하겠습니다.

댓글 없음:

댓글 쓰기