유니티 강좌2014. 3. 25. 06:00

2) State 구성하기


Playmaker의 Editor창에 있는 State탭에서 'State 1'이라고 되어 있는 이름을 'Wait' 이라고 변경해줍니다.


[그림 3-20]


이 State가 하게 될 역할은 큐브가 바닥에 떨어지는 시간 동안 기다릴 역할을 하게 될 것입니다.


그러면 이제 기다리라는 내용의 Action을 State에 넣어서, State 구성을 완성해보겠습니다.


Playmaker Editor 창에서 State를 선택한 상태에서 State 탭을 보면 우측 하단에 Action Browser라는 버튼을 볼 수 있습니다.


[그림 3-21]


이 버튼을 클릭하면, State에 넣을 수 있는 액션들이 나열된 창을 보실 수 있습니다.

Action Browser에서 Time > Wait 메뉴를 더블 클릭해서, 'Wait' State에 추가해줍니다.

  

[그림 3-22]


'Cube'가 'Plane' 위에 떨어지는 속도는 1초 정도 걸리므로, Time의 수치는 기본으로 설정되는 1 값을 그대로 사용합니다.

그 다음, Playmaker Editor창에서 'Wait' State를 우 클릭 했을 때 나타나는 메뉴에서 Add Transition > FINISHED 메뉴를 클릭해서 FINISHED Event를 생성해줍니다.


[그림 3-23]


그리고 다시 State에 설정된 Wait 액션으로 돌아와서 Finish Event를 앞서 설정한 FINISHED Event 이벤트로 연결해줍니다.

 

[그림 3-24]


이로써, Wait 액션의 기능이 [1초 동안 기다린 다음, FINISHED 이벤트를 발동시켜라.] 라는 행동을 할 수 있게 되었습니다.

   

※Playmaker Editor에서 작업을 진행하다 보면, State에 빨간색 느낌표가 나타나는 경우가 있습니다.


   [그림 3-25]


아마 'Wait' State에 FINISHED 이벤트를 생성해준 순간 빨간색 느낌표가 나타났을 것입니다.

이 느낌표 표시는 현재의 State에 에러가 있다는 것을 의미하며, 자세한 내용은 PlaymakerEditor창의 하단에 있는 error 버튼을 누르면 확인할 수 있습니다.


[그림 3-26]


[그림 3-26]에서 에러 내용을 살펴보면 ['Cube'오브젝트에 있는 'FSM CUBE POSITION RESET' FSM의 'Wait' State에 설정된 이벤트 중, 타겟이 될 State에 연결되지 않은 것이 있다.] 입니다.


State에 설정되는 이벤트들은 어떠한 상황이 일어난 것을 액션에서 감지하고, 그 액션에서 [현재의 상태를 특정 이벤트가 타겟으로 잡고 있는 상태로 변화하라.]는 명령을 실행할 때, 타겟을 잡아주는 과정에 포함되기 위해서 존재합니다.


앞서 설정한 'Wait' State의 경우에는 FINISHED 이벤트가 설정된 이유가 [1초 동안 기다린 후, FINISHED 이벤트가 타겟으로 잡고 있는 상태로 변화하라.] 라는 명령을 구성하기 위해서 입니다.

그런데, 정작 FINISHED 이벤트에 연결된 다음 상태가 없기 때문에 에러가 나타난 것입니다.

   

이제 다음 State를 하나 더 만들어 준 후에 State 이름을 'Reset Cube Position'이라고 이름을 지어줍니다.

그리고 'Wait' State의 FINISHED 이벤트를 클릭 & 드래그를 해서 화살표를 꺼낸 뒤, 'Reset Cube Position' State에 연결시켜줍니다.


[그림 3-27]


[그림 3-28]


그 다음 'Reset Cube Position' State를 선택하고 Action Browser 창을 Open 한 뒤, Transform 카테고리에서 Set position 액션을 찾아서 더블 클릭하여 'Reset Cube Position' State에 삽입합니다.

  

[그림 3-29]


※ Action의 카테고리 종류와 그 안의 내용 배치에 대해서 다 이해할 수 있을 때까지는 검색기능을 사용하기보다, 직접 카테고리를 클릭해서 열어보며 액션들과 카테고리의 연결점에 대해서 생각해보는 것이 좋습니다.

   

그리고 삽입한 Set Position 액션에서 Y축 입력 칸의 우측에 있는 변수 사용(Use Variable) 버튼을 눌러서 해제 상태로 만들어준 뒤, 절대값 2를 입력합니다. (2를 입력하는 이유는 Cube를 선택하고 Inspector창에서 Transform을 확인해보면 큐브가 떨어지기 전에 셋팅되어 있는 Y축 좌표 값이 2이기 때문입니다.)


[그림 3-30]


이렇게 설정된 Set Position 액션의 내용을 설명하자면 다음과 같습니다.

① 움직여야 할 Game Object는 Use owner (FSM이 존재하는 오브젝트. 즉, 'Cube' 자기 자신)

② 움직여야 할 위치는 Y축으로 변수 값이 아닌 절대값 2만큼

③ 움직일 때 참고할 방향 좌표는 World를 기준으로


[그림 3-31]


이제 플레이 버튼을 눌러서 어떤 결과가 나타나는지 확인해봅시다.

Game창에 보이는 화면에서 'Cube'가 'Plane' 위에 떨어졌다가, 다시 원래의 위치로 되돌아가서 떨어지는 것을 보실 수 있습니다.

Playmaker Editor창을 보면 초기에 Start > 'Wait' State에 녹색빛이 머물렀다가, 1초 뒤에 'Reset Cube Position' State로 이동하는 것을 볼 수 있습니다.

   

※ 오브젝트에 FSM 컴포넌트가 들어간 이후에는 Scene 창에서 오브젝트를 보면 PlayMaker 로고가 반투명하게 표시되어 보이는 것을 보실 수 있습니다. 이 로고가 오브젝트를 가려서 거슬리는 분들은 아래의 그림과 같이 Scene창에서 Gizmos버튼을 클릭했을 때 나오는 메뉴에서 PlaymakerFSM의 체크를 풀어주면 됩니다.

 

[그림 3-32]


다음으로 큐브가 한 번만 포지션이 리셋되는 것이 아니라, 떨어질 때마다 매번 포지션이 리셋이 되도록 한 번 만들어 보겠습니다.

   

먼저 Playmaker Editor 창에서 'Reset Cube Position' State를 우 클릭 했을 때 나타나는 메뉴에서 Add Transition > FINISHED 메뉴를 클릭해서 FINISHED Event를 생성해줍니다.

그리고, FINISHED Event를 클릭 & 드래그하여 'Wait' State를 타겟으로 하도록 연결시켜 줍니다.


   [그림 3-33]


   그리고 다시 플레이 버튼을 눌러서 매 1초마다 큐브의 위치가 잘 Reset 되는 지를 확인해봅시다.

   

※'Reset Cube Position' State는 내부에 있는 액션이 Finished Event를 설정할 수 없는 액션이 없는데도 불구하고, FINISHED 이벤트가 타겟으로 설정하고 있는 'Wait' State로 상태 변환이 잘 일어나는 것을 볼 수 있습니다.

그 이유는 시스템에서 기본으로 제공하는 FINISHED 이벤트는 State 내에 Every Frame 과 같이 지속적으로 체크를 해줘야 하는 액션설정이 존재하지 않는 이상 자동으로 다음 State로 처리과정을 넘겨주는 기능을 가지고 있기 때문입니다.

만약, State내에 지속적으로 체크를 하는 속성의 액션이 있다면, Wait이나 Send Event 액션으로 Finished Event를 설정해줘야 처리과정을 다음 State로 넘길 수 있습니다.

   

다음 강좌에서는 Prefab 만들기에 대해 알아보겠습니다.


스마트 아카데미 '스마트 앱 개발' 교육과정 안내

스마트 앱 개발 학원 국비지원 안내

K팝 홀로그램 상설공연장 개소

구글의 네스트 인수 의미

스카이 아카데미 취업 정보 - 선데이토즈 이야기

창의인재과정 안내

미래창조과학부 창조경제 실현

크리에이티브 UX교육 훈련과정 안내


Posted by 알 수 없는 사용자