2016년 8월 24일 수요일

Soft Potentiometer 다루기

이번에는 아두니티로 Soft Potentiometer를 다루는 법에 대해 소개하겠습니다.
Soft Potentiometer는 손의 터치 위치에 따라 저항이 바뀌는 특성을 가진 부품입니다.

이 부품을 아두이노에서 사용하려면 다음과 같이 회로를 꾸미면 됩니다.

터치 위치에 대한 정보는 Analog Pin으로 입력받게되며, 여기서 저항의 역할은 Pull-up/down입니다.
Soft Potentiometer는 손으로 터치하지 않았을 때, 0V 혹은 5V도 아닌 애매한 전압을 갖게 됩니다. 그래서, Pull-up/down 회로를 붙여서 확실한 값을 가질 수 있도록 만들어줘야 합니다.
  • Pull-up: 기본 상태를 5V로 만든다.
  • Pull-down: 기본 상태를 0V로 만든다.

이 회로를 유니티에서 다루려면 아두니티 Wire Editor에 다음과 같이 연결하면 됩니다.

위 정보를 아두이노 스케치로 Export하고 보드에 업로드하면 유니티에서  Soft Potentiometer를 다룰 수 있는 준비가 끝납니다.
실제로 보드와 유니티를 연결하여 실험을 해보면 다음과 같은 결과를 볼 수 있습니다.
  • 손으로 터치하지 않았을 때는 값이 0
  • 손으로 터치하는 위치에 따라 0 ~ 1 사이 값이 변경됨
잘 동작 함을 확인할 수는 있겠지만, 이 특성으로 뭔가 응용을 하려면 아이디어가 잘 나오지 않습니다.


DragInput
드래그(Drag)는 마우스 컨트롤에서 자주 사용되는 용어로써 뭔가를 잡아 끌다라는 뜻입니다. DragInput은 AnalogInput의 값에서 드래그 정보를 추출하는 역할을 하는 Bridge입니다. 이것을 이용하면 Soft Potentiometer를 손가락으로 드래그하여 유니티에서 활용할 수 있습니다.


DragInput의 주요 기능은 다음과 같습니다.
  • Drag의 시작과 끝을 감지하여 알려준다.
  • Drag가 일어나는 동안 손의 위치를 알려준다.
  • Drag가 끝난 후 위치의 변화량(시작 위치와 끝 위치 사이의 거리)을 알려준다.
  • Drag가 끝날때 손의 움직임에 대한 빠르기를 알려준다.
위와 같은 기능은 유니티에서 재미있는 효과를 표현할 때 유용하게 사용될 수 있습니다.

DragInput을 사용하려면 다음을 설정해야 합니다.
  • minValue: Drag를 감지할 영역의 최소 값
  • maxValue: Drag를 감지할 영역의 최대 값
  • invert: Drag 방향을 반전시킴
  • delta Multiplier: Drag 위치 변위에 곱할 값
  • force Multiplier: Drag 종료 시 발생하는 힘에 곱할 값
DragInput을 AnalogInput에 연결하는 방법은 다음과 같습니다.

유니티를 재생(Play) 모드로 만들면, DragInput에서 감지하는 Drag 정보를 확인할 수 있습니다.
  • isDrag: Drag 발생 여부
  • delta: 손으로 Drag한 거리
  • force: Drag 종료 시 발생한 힘의 크기
  • Value: Drag중일 때의 손의 위치

DragInput으로 물체 이동시키기
MoveAxisReactor는 GameObject를 한 방향으로 이동시키는 기능을 갖고 있습니다. DragInput과 같이 사용하면 손으로 Drag하여 물체를 움직이는 효과를 만들 수 있습니다.


MoveAxisReactor를 사용하려면 다음을 설정해야 합니다.
  • moveAxis: 이동시킬 방향(축)
  • invert: 입력에 대해 반대로 이동 여부
  • scaler: 입력에 곱할 값
  • Use Gizmo: Scene UI 사용 여부
DragInput과 같이 사용하려면 다음과 같이 연결합니다.


DragInput으로 물체 회전시키기
RotationAxisReactor는 GameObject를 지정한 축을 중심으로 회전시키는 기능을 갖고 있습니다.
DragInput과 같이 사용한다면 손으로 물체를 돌리는 효과를 만들 수 있습니다.


RotationAxisReactor의 설정은 다음과 같습니다.
  • upAxis : 회전 중심축
  • forwardAxis : 회전각이 0도인 방향
  • invert : 입력에 대한 회전 방향 반대 적용 여부
  • Use Gizmo : Scene Window의 회전 도구 사용 여부
RotationAxisReactor의 Gizmo

DragInput과 같이 사용하려면 다음과 같이 연결합니다.


DragInput으로 물체 던지기
ForceReactor를 사용하면 DragInput에서 발생하는 force를 이용해서 물체를 던지는 효과를 만들 수 있습니다.



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


DragInput으로 물체를 팽이처럼 돌리기
TorqueReactor는 RigidBody에 회전력(Torque)를 적용하는 기능을 갖고 있습니다. 이것을 DragInput과 함께 사용하면 물체를 팽이처럼 돌릴 수 있습니다.


TorqueReactor를 사용하려면 다음의 설정이 필요합니다.
  • rigidBody: Force를 적용할 RigidBody
  • axis: 회전력의 중심축 (설정한 GameObject의 Forward 방향)
  • torque: 회전력의 크기
  • forceMode: 힘을 적용하는 방법 (참고 링크)
  • oneShotOnly: 한번만 실행할 지 여부
DragInput과 같이 사용하려면 다음과 같이 연결합니다.



지금까지의 응용 방법을 영상으로 확인해보시기 바랍니다.

댓글 없음:

댓글 쓰기