screenpick의 example ====== 목표 ====== - 화면 상의 특정 오브젝트를 클릭했을때, - 디버그 윈도우 화면을 불러온다. - 다시 해당 오브젝트를 클릭하면, 디버그 윈도우를 닫는다. ====== FSM ====== {{:language:unity:playmaker:pm-screenpick-1.jpg|}} ====== 사용할 변수 ====== * didPickObject : 게임오브젝트가 선택 되었는가? * pickedGameObject : 선택한 게임 오브젝트 저장 * mouseX, mouseY : 마우스가 클릭된 화면상의 위치 * isDebugMenuOnScreen : 디버그윈도우가 화면에 보이는 상태인지? {{:language:unity:playmaker:pm-screenpick-2.jpg|}} ====== 'wait' state ====== * 화면의 버튼눌림이 감지되면, 'menuMoveReaction' 이벤트를 보낸다. * **Get Mouse X**와 **Get Mouse Y**로 클릭된 화면상의 (x,y)를 얻는다. * **Get...**이 위로 가야하나 싶었는데, 순서는 상관 없었다. * **Get Button Down**과 같은 마우스 클릭에 대한 액션이 없으면, x/y 좌표를 얻을 수 없었다. {{:language:unity:playmaker:pm-screenpick-3.jpg|}} ====== 'checkObject' state ====== - Screen Pick : 전제 조건이 있어서 헤매는 부분. * **Screen Pick**으로 클릭된 위치의 오브젝트를 얻는다. * **Screen X** / **Screen Y**가 설정되지 않으면, 오브젝트를 얻어오지 않았다. * didPickObject와 pickedGameObject 에 확인된 오브젝트를 저장한다. - Game Object Compare : 간단한 부분. * pickedGameObject와 "MonkeySymbol"(=내가 찾으려는 오브젝트)가 같은지 비교한다. * 같으면, 'menuMoveReaction' 이벤트를 발생시킨다. {{:language:unity:playmaker:pm-screenpick-4.jpg|}} ====== 'isMenuOnScreen' state ====== * isDebugMenuOnScreen, bool 변수를 검사 * true : debugMenuOff 메시지 전송 (메뉴를 꺼라) * false : debugMenuOn 메시지 전송 (메뉴를 불러오라) {{:language:unity:playmaker:pm-screenpick-5.jpg|}} ====== 'debugMenuOn' state ====== * 어떤 오브젝트에 메시지를 보낼 것인지 ( 감각적으로는 그냥 함수 호출이지만 ) 정한다. * Scene 내부의 DebugObject에 붙어 있는 Component의 스크립트 함수를 호출한다. * debugMenuOn은 함수 이름으로 파라미터가 true면 메뉴를 불러오고 , false면 메뉴를 닫는다. * 다음 상태 체크를 위해서, **Set Bool Value** 액션으로 bool 값을 바꿨다. {{:language:unity:playmaker:pm-screenpick-7.jpg|}} ====== 'debugMenuOff' state ====== debugMenuOn와 같다. 전달하는 파라미터 값이 false 인 것이 다르다. {{:language:unity:playmaker:pm-screenpick-6.jpg|}}