본문 바로가기
프로그래밍/Unity

Unity3d NGUI버튼 딜레이효과로 반복클릭 안되게 하기

by 메르세데쓰 2015. 3. 21.
반응형




메르세데스입니다. 


이번시간에는..  NGUI로 만든 버튼에 딜레이 효과를 주는 방법을 알아보겠습니다.     


게임을 만들다보면.. 분명 이런 일들이  있을거라 생각 하거든요..     버튼을 눌렀을 때 원격지 서버에 접속하여 내 캐릭터 안에 들어 있는 돈이라던가 아이템이며.. 각종 정보들을 불러오거나.. 혹은 저장하거나  하는 일들요...


이런 중요한 작업을 하는데  버튼을 마구마구 누르게 할 순 없잖아요.. 특히 중간에 네트워크라는게 끼게되면..  작업이 성공할 수도있지만 실패할 수도있고.. 복잡해 집니다. 이런 경우를 해결하기 위해선... 작업이 정상적으로 완료될 때 까지 기다려주는 방식이 필요하겠죠..


저는 델파이언어를 사용해서 현업에서 개발을 하는데요.. VCL기반의 프로그램들은.. 버튼이벤트 같은 경우 그닥 신경을 안써도 큰 문제가 없었거든요  작업이 완료될 때 까지 눌려 있으니까요.. 하지만 여기는 유니티이기 때문에..    이 환경에 맞게 적응해야 겠습니다.


저도 초보이고.. 이 방법이 최선은 아닐거라 생각합니다. 나중에 열심히 공부하면서 더 좋고 확실하고 효율적인 방법을 찾으면 그만이니까요..



NGUI를 살펴보던 중.. UI Camera 컴포넌트의 Event Sources부분에  이벤트를 발생시키는 입력장치를 제어하는 옵션이 있길래 이걸 갖고 버튼을 눌렀을때 일정시간 지연시키는 방법을 제 나름대로 생각해봤습니다.



UI Camera Event Sources


체크가 해제되면 해당기기로 입력으로 이벤트가 원천 차단 되는거죠..   그래서..  Mouse와 Touch를..  잠시 해제 시켰다가 다시 가동시키면 버튼이 여러 번 눌러지지 않을 테니까요..       


Event발생을 위해선..  UIButtonMessage Component가 필요합니다.   지난포스팅을 보시면.. 됩니다.. 


UI Button Message


그리고.. OnCLK라는 메소드를 만들어놨고..  Function Name에 연결해놓고.. 후다닥 스크립트를 짜봤습니다.


StartCorutine을 이용하여    터치와 마우스기능의 체크를 잠시 해제하고.. 로그를 찍고.. 5초 기다렸다가 다시 체크하도록 했습니다.



코딩을 완료하고.. 실행을 하고.. 만들어 놓은 테스트 버튼을 눌러봤습니다.


코루틴함수를 이용하여 입력장치 지연시키기


의도한대로..  사용을 일시중지시키고.. 로그를 찍었으며.. 5초를 기다렸더니 다시 활성화가 되어. .버튼이 다시 눌러지네요..


코루틴함수를 이용하여 입력장치 지연시키기


뭐.. 테스트다보니.. 이렇게 한번 해 본 것이고요.. yield문 뒤에 시간이 아닌..   전송이나 저장등의 상태가 완료되도록 소스를 수정하면.. 좀 더 현실에 맞는 결과를 얻을 수 있겠네요.


그리고 키보드와 마우스입력을 못 받도록 얼리는 것 보다는...  해당 버튼만 안눌려지는 상황을 만드는 것이 좋겠죠...  예를 들어.. collider의 is Trigger옵션을 해제 한다던가... 잠시 사용이 안되게 하는게 좋겠네요..    글을 쓰다보니 그렇게 한번 예제를 만들어 보는게 좋겠다는 생각이 듭니다. ㅎㅎㅎ  


책을 보면서.. 연구 해가며.. 공부하는데 정말 더딥니다. 정말로요^^







반응형

댓글