2016년 7월 27일 수요일

DigitalInput 응용

DigitalInput의 대표적 응용 사례는 바로 Button 입력을 체크하는 것입니다.
Button 회로는 2가지로 꾸밀 수 있는데, Pull-up회로를 넣느냐 안 넣느냐로 나뉩니다.
(Pull-up 회로를 만들었기 때문에 DigitalInput의 Sketch Option 중 pullup을 체크하지 않습니다.)


(Pull-up 회로를 만들지 않았기 때문에 DigitalInput의 Sketch Option 중 pullup을 체크합니다.)

이 회로를 완성하고 아두이노 스케치를 업로드한다면 버튼의 입력을 유니티에서 사용할 수 있습니다.
유니티에서 버튼의 입력을 활용하는 방법을 몇 가지 소개하겠습니다.

Button으로 소리제어
AudioSourceReactor는 아두이노로 소리를 제어할 수 있는 컴포넌트입니다.


AudioSourceReactor를 추가하려면 해당 GameObject에 AudioSource가 반드시 추가되어있어야 합니다.
AudioSourceReactor는 프로그래밍없이 지정한 Audio Clip을 Play하거나 Volume을 조절하는 기능을 갖고 있습니다.
AudioSourceReactor와 DigitalInput을 다음과 같이 연결하면 Button을 누르면 소리가 Play되고 떼면 소리가 Stop됩니다.


Button으로 Light 제어
LightIntensityReactor를 사용하면 Button으로 Light의 Intensity를 제어할 수 있습니다.
LightIntensityReactor를 Button과 다음과 같이 연결하면 Button을 누르면 Light가 켜지고 떼면 Light가 꺼지게 됩니다.


Button입력으로 Trigger Event 발생시키기
Button은 누름과 뗌의 두가지 상태로 사용할 수 있지만, 때로는 어떤 이벤트를 발생시키는 용도로 사용해야 할 때도 있습니다.
Trigger Event란, TREU/FALSE가 아닌 오직 Active라는 한 가지 상태만 사용합니다. 즉, Trigger Event를 사용하면 Button을 눌러서 어떤 동작을 시킬 수 있습니다.
아두니티는 Bridge라 부르는 신호 변환 기능을 갖고 있습니다.

이 Bridge는 입력 신호용(Input)과 출력 신호용(Output)으로 나뉩니다.
우리가 사용할 Trigger Event는 입력 신호를 변환하는 것이므로 Input 메뉴에 있으며 TriggerInput이란 이름을 갖고 있습니다.


TriggerInput은 DigitalInput의 Value에 변화가 있을 때마다 Trigger Event를 발생시킵니다. 이 Value 변화의 기준을 정하는 것이 CheckEdge 항목이며 사용법은 다음과 같습니다.

  • Rising Edge: FALSE에서 TRUE로 변할 때
  • Falling Edge: TRUE에서 FALSE로 변할 때

이 TriggerInput과 DigitalInput을 다음과 같이 연결하면 Button 입력이 Trigger Event로 바뀝니다.
 


Trigger Event로 폭발 효과 발생
ExplosionReactor는 Trigger Event로 폭발 효과를 발생시켜서 주변의 물체를 날리는 기능을 갖고 있습니다.


ExplosionReactor는 다음과 같은 설정을 할 수 있습니다.

  • effectRadius: 폭발 효과가 미치는 범위
  • explosionForce: 폭발력
  • oneShotOnly: 한번만 실행할 지 여부
  • layerMask: 폭발 효과가 미칠 GameObject Layer
  • Use Gizmo: Scene에서 effectRadius를 위한 Editor 기능 사용 여부
(ExplosionReactor의 Gizmo 기능)
ExplosionReactor와 TriggerInput이 다음과 같이 연결되면 Trigger Event가 발생할 때마다 폭발 효과가 실행됩니다.


Trigger Event로 물체에 Force 적용하기
ForceReactor는 Rigidbody에 Force를 적용하는 기능을 갖고 있습니다.


ForceReactor를 사용하려면 다음과 같은 설정이 필요합니다.
  • rigidBody: Force를 적용할 RigidBody
  • position: Force를 적용할 위치 (설정한 GameObject의 Position)
  • direction: Force를 적용할 방향 (설정한 GameObject의 Forward 방향)
  • force: 힘의 크기
  • forceMode: 힘을 적용하는 방법 (참고 링크)
  • oneShotOnly: 한번만 실행할 지 여부
ForceReactor와 TriggerInput이 다음과 같이 연결되면 Trigger Event가 발생할 때마다 지정한 GameObject에 Force가 적용됩니다.



Button입력을 Toggle입력으로 바꾸기
Toggle이란, 변화가 일어날때마다 TRUE/FALSE를 바꾸는 방식을 의미합니다. Button은 누르면 TRUE, 떼면 FALSE인데, 만약, 누를때마다 상태가 바뀌어서 마치 스위치처럼 사용하려면 Toggle입력이 필요합니다.
ToggleInput은 DigitalInput의 변화가 있을때마다 TRUE/FALSE를 바뀌게 만들 수 있습니다.


ToggleInput을 사용하려면 CheckEdge라 부르는 변화의 기준을 설정해야 합니다.

  • Rising Edge: FALSE에서 TRUE로 바뀔 때 상태 변화
  • Falling Edge: TRUE에서 FALSE로 바뀔 때 상태 변화
DigitalInput의 값을 ToggleInput 값으로 변경하려면 다음과 같이 연결합니다.

ToggleInput을 LightIntensityReactor와 연결시키면 DigitalInput으로 Light 제어할 때와 달리 Button을 누를 때마다 Light Intensity가 바뀌는 것을 확인할 수 있습니다.



지금까지 소개한 활용 방법을 영상으로 확인하시기 바랍니다.


댓글 3개:

  1. 질문이 있습니다! 버튼이 인식을 잘하다가 갑자기 안되고
    play 후 1~2초 후에 false에서 true로 아무클릭하지않았는데도 입력되다가 다시 false로 돌아온 후 버튼도 인식하지않는데 이유가 무엇인지 알고 싶습니다!

    답글삭제
    답글
    1. 뭔가 연결에 문제가 있는 것 같은데, 질문 내용만으로는 원인을 파악하기 힘드네요.
      더 상세한 상담이 필요하다면. 포럼을 이용해주시기 바랍니다.

      삭제
    2. 포럼 링크 포함시킵니다.
      (https://groups.google.com/forum/#!forum/ardunity-forum-kor)

      삭제