2016년 9월 30일 금요일

아두니티 PlayMaker Add-on

아두니티는 PlayMaker를 완벽하게 지원합니다.
PlayMaker는 C# 프로그래밍을 배우기 어려워하는 사람들에게 인기가 많은 Visual 프로그래밍 도구입니다.
아두니티는 전문 기술이 없는 메이커를 주 사용자로 보고있기 때문에 PlayMaker를 이용해서 아두니티를 제어하는 것을 지원하고 있습니다.
PlayMaker에서 아두니티를 제어하려면 먼저 아두니티 PlayMaker Add-on을 설치해야 합니다.
PlayMaker Add-on 설치 메뉴

아두니티 PlayMaker Add-on을 설치하려면 반드시 PlayMaker가 이미 Import되어야 합니다. 만약, 갖고있지 않은 분들은 먼저 에셋 스토어에서 PlayMaker를 구매해야 합니다.
PlayMaker Add-on이 추가되는 모습

PlayMaker Add-on이 설치되고 나면 다음과 같은 것이 생기게 됩니다.
  • 에셋 폴더에 PlayMaker가 생긴다.
  • PlayMaker 관련 기능을 추가할 수 있는 메뉴가 생긴다.
  • PlayMaker Action Browser에 ARDUnity 카테고리가 생긴다.
ARDUnity Asset 폴더에 PlayMaker가 생긴다.

PlayMaker 관련 기능을 추가할 수 있다.

PlayMaker Action에 ARDUnity 카테고리가 생긴다.

이렇게 된다면 아두니티에서 PlayMaker를 사용할 수 있는 준비가 끝납니다.
만약, PlayMaker가 없는 상태에서 PlayMaker Add-on을 설치했다면 에러가 발생하게 되는데, 이를 해결하려면 ARDUnity/PlayMaker 폴더를 삭제하면 됩니다.

PlayMaker Action은 FSM Logic내에서 기능을 수행하기 위해 사용합니다. 만약, FSM Logic내에서 아두니티를 제어하려면 ARDUnity Action을 사용하면 됩니다.

PlayMaker에서 Event는 Transition을 발생시키기 위해 사용합니다.
PlayMaker Action이 출력을 위해 사용된다면 Event는 입력을 위해 사용된다고 생각할 수 있습니다.
그렇다면 아두이노 보드에서 일어나는 일을 PlayMaker Event로 받기 위해서는 어떻게 해야 할까요?
PlayMaker Editor에서 Event를 만들수는 있지만, Event를 발생시킬 수는 없습니다. 이 말은 PlayMaker Event를 발생시킬 수 있는 무언가가 필요하다는 뜻입니다.

아두니티에서 일어나는 일을 PlayMaker에 알려줄 수 있는 Event를 발생시키는 컴포넌트가 바로 Proxy입니다. Proxy란 말은 어떤 것을 감시하여 알려준다는 의미를 갖고 있습니다.
ARDUnity Proxy 추가 메뉴

각 Proxy들은 감시 대상이 필요한데, 모든 대상이 아닌 특정 대상만 감시하게 됩니다.
예를 들어 DigitalInputProxy는 DigitalInput의 이름을 가진 ARDUnity 컴포넌트를 감시한다는 것입니다.
아두이노 회로에서 버튼이 눌리면 PlayMaker Event가 발생하는 예제를 직접 만들면서 Proxy 사용법을 알려드리겠습니다.
먼저, 버튼 제어에 사용되는 DigitalInput을 찾아 GameObject를 선택합니다. 이때 Proxy 추가 메뉴를 보면 DigitalInputProxy가 활성화된 것을 볼 수 있습니다.
Proxy를 추가하려면 먼저 감시할 대상이 추가되어 있어야 한다.

DigitalInputProxy를 추가하면 Inspector Window에 컴포넌트가 추가된 것을 볼 수 있습니다.
Proxy가 추가된 모습

만약, Proxy의 감시 대상이 없어진다면 에러가 표시되고 더 이상 Proxy역할을 할 수 없게 됩니다.
Proxy는 감시 대상이 없다면 에러가 출력된다.

Proxy의 역할을 대상을 감시하고 PlayMaker Event를 발생시키는 만큼 EventTarget 설정이 필요합니다. EventTarget이란 발생시킬 Event를 갖고 있는 PlayMaker FSM을 의미합니다.
만약, EventTarget이 지정되지 않는다면 Proxy는 Scene내의 모든 FSM에서 Event를 발생시키게 됩니다.
특정 FSM에서만 Event를 발생시키려면 해당되는 FSM이 포함된 GameObject를 지정해야 합니다.
Proxy에서 EventTarget을 지정할 수 있다.

먼저, FSM이 포함된 GameObject가 선택되었다면 그 GameObject에 속해있는 FSM 리스트 중에서 다시 선택할 수 있습니다.
"Included All FSM"의 의미는 선택한 GameObject내에 있는 모든 FSM에서 Event가 발생한다는 뜻입니다.

EventTarget이 설정되었다면, 다음으로는 Event 이름을 정해야 합니다.
각 Proxy에는 발생시킬 수 있는 Event가 이미 정해져있으며 기본 이름 값을 가지고 있습니다. 같은 Proxy를 여러 개 사용하는 경우 Event 이름이 중복될 수 있으므로 Event 이름을 바꿀 수 있습니다.
Proxy에 있는 Event 이름은 설정한 EventTarget에 그대로 전달됩니다.
하지만, 정작 Event를 받는 FSM은 그 이름을 알지 못하기 때문에 반드시 Proxy에 있는 Event 이름을 추가해줘야 합니다.
Proxy의 Event이름과 FSM의 Event이름은 같아야 한다.
 
이렇게 Event가 추가되면 Transition을 사용할 수 있도록 메뉴가 생기게 됩니다.
추가한 Event가 Transition에 메뉴로 나타난다.

이로써 FSM에 Proxy가 사용하는 Event에 반응할 수 있는 Transition이 만들어집니다.
이렇게되면 아두이노 버튼이 눌리면 -> DigitalInput의 값이 변경되고 -> DigitalInputProxy가 이를 감지하여 Event를 FSM에 보내고 -> FSM에서는 발생한 Event를 사용하는 Transition이 일어나서 반응하게 되는 것입니다.
하드웨어 반응에 따른 동작을 쉽게 구현할 수 있다.

향후, 실제 예제를 통해 아두니티에서 PlayMaker를 활용하는 방법을 보여드리도록 하겠습니다.


댓글 없음:

댓글 쓰기