2016년 6월 28일 화요일

아두니티(ARDUnity) 아키텍처

아두니티는 다음과 같은 아키텍처를 갖고 있습니다.

아두니티는 아두이노 스케치와 유니티 컴포넌트가 상호작용할 수 있도록 ArdunityApp과 ArdunityController라는 공통 코드 체계를 갖고 있습니다.
따라서, 아두니티 어플리케이션을 만들기 위해서는 이 공통 체계를 반드시 사용해야 합니다.
사용자는 이 구조를 확장하기 위해서 상속(Inheritance) 개념을 통해 파생된(Derived) 코드를 만들어 사용할 수 있습니다.
아두니티에는 기본적으로 가장 잘 사용될 수 있는 기능들을 이미 파생된 코드로 내장하고 있습니다. 만약, 제공된 기능만으로 만족할 수 없는 경우 오픈 소스로 공개된 파생된 코드를 참고하여 자기만의 파생된 코드를 만들어 추가할 수 있습니다.

아두이노 스케치에 필요한 Class들은 아두니티 에셋의 Arduino 폴더에 있습니다.
아두이노 Class들은 C++로 작성되어 있으며 스케치 자동 생성 시 사용 여부에 따라 외부로 Export됩니다.
아두이노 Class들은 실제로 하드웨어를 제어할 때 아두이노 라이브러리를 사용합니다.
따라서, 아두이노 호환 보드에서는 이 코드들이 하드웨어 의존적이지 않게 잘 동작할 수 있는 것입니다.

아두이노 스케치는 외부와 통신할 때 아두이노 라이브러리 중 Stream이라 불리는 라이브러리를 사용합니다. 아두니티 또한 이 Stream 라이브러리를 통해 외부와 통신합니다.

유니티는 외부와 통신하기 위해 Serial, Bluetooth, WiFi등 다양한 방법을 사용할 수 있는데, 이것들을 손쉽게 사용하기 위해 아두니티에서는 CommSocket이라는 컴포넌트를 제공합니다.
통신 방식과 프로토콜은 완벽하게 분리되어 있기 때문에, CommSocket만 바꾸면 쉽게 통신 방식을 바꿀 수 있습니다.
이 말은 통신 방식이 바뀌었다고 어플리케이션을 다시 만드는 것이 아니라 그냥 CommSocket만 바꿈으로써 쉽게 변경할 수 있다는 뜻입니다.

아두니티를 사용하려면 반드시 ArdunityApp과 ArdunityController를 사용해야 합니다. ArdunityController는 파생될 수 있으며, 실제로 Controller란 이름으로 많이 사용되는 기능들이 파생 Class로 구현되어 제공됩니다.

아두니티에서는 아두이노 보드와 주고받을 데이터를 보다 사용하기 쉽게 가공할 수 있는 유용한 기능들을 제공합니다.
이것의 종류는 다음과 같습니다.
  • Bridge: 주로 Controller와 직접 연결되어 사용하기 쉽게 데이터를 가공하는 역할
  • Reactor: 별도의 프로그래밍없이 바로 유니티 컴포넌트를 제어할 수 있는 역할
  • Utility: 유용하게 사용될 수 있는 기능들을 제공

아두니티는 프로그래밍에 익숙치 않은 아티스트들도 사용할 수 있도록 PlayMaker를 지원합니다.


아두니티를 PlayMaker로 제어하려면 PlayMaker Add-on을 추가 설치해야 합니다.
이를 위해 아두니티는 PlayMaker Add-on 설치를 할 수 있는 메뉴를 제공합니다.
PlayMaker Add-on이 설치되면 다음과 같은 PlayMaker용 기능을 볼 수 있습니다.

  • Proxy: 아두이노 보드의 입력을 Event로 전달해주는 대리자
  • Action: PlayMaker FSM의 State에서 Controller제어에 사용할 수 있는 기능

또한, 아두니티의 모든 기능은 추가 컴포넌트 개발을 최소화하기 위해 일어나는 모든 이벤트를 UnityEvent로 만들었기 때문에 Editor상에서 컴포넌트 연결을 손쉽게 할 수 있습니다.

댓글 없음:

댓글 쓰기