안녕하세요 UnityBeginner입니다.
이번 글에선 오브젝트를 클릭하여 마우스가 움직이는 방향대로 Transform을 변경시키는 방법에 대해 알아보겠습니다.
이번 글에선 오브젝트를 클릭하여 마우스가 움직이는 방향대로 Transform을 변경시키는 방법에 대해 알아보겠습니다.
씬뷰
위 이미지와 마우스를 이용하여 이동시킬 오브젝트들을 생성해줍니다.
스크립트 Cube
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | private float zpos; private Vector3 mOffset; public void OnMouseDown() { zpos = Camera.main.WorldToScreenPoint(gameObject.transform.position).z; } public void OnMouseDrag() { transform.position = GetMousePosition(); } private Vector3 GetMousePosition() { Vector3 mousePoint = Input.mousePosition; mousePoint.z = zpos; return Camera.main.ScreenToWorldPoint(mousePoint); } |
큐브를 마우스를 클릭, 드래그하여 이동시키는 코드입니다.
Input.mousePosition을 사용하면 Screen좌표에서의 마우스 위치를 가져오므로
이 값을 그대로 큐브의 position에 적용시키면 좌표계가 다르기 때문에 큐브는
이상한 곳 으로 날아가 버리게됩니다.
그래서 Camera.main.ScreenToWorldPoint 이용하여 좌표계를 동일하게
맞춘 후 적용시켜야 오브젝트가 마우스의 위치로 따라오게됩니다.
OnMouseDown
- 마우스가 클릭된 경우 호출됩니다.
OnMouseDrag
- 마우스가 클릭되고 움직이는 동안 계속 호출됩니다.
OnMouseUp
- 마우스의 누른버튼을 놓았을 때 호출됩니다.
Camera.main.ScreenToWorldPoint
- 스크린 좌표에서 월드 좌표로 변환합니다.
Camera.main.WorldToScreenPoint
- 월드 좌표에서 스크린 좌표로 변환합니다.
이 외에도 다양한 좌표변환이 가능합니다.
Input.mousePosition을 사용하면 Screen좌표에서의 마우스 위치를 가져오므로
이 값을 그대로 큐브의 position에 적용시키면 좌표계가 다르기 때문에 큐브는
이상한 곳 으로 날아가 버리게됩니다.
그래서 Camera.main.ScreenToWorldPoint 이용하여 좌표계를 동일하게
맞춘 후 적용시켜야 오브젝트가 마우스의 위치로 따라오게됩니다.
OnMouseDown
- 마우스가 클릭된 경우 호출됩니다.
OnMouseDrag
- 마우스가 클릭되고 움직이는 동안 계속 호출됩니다.
OnMouseUp
- 마우스의 누른버튼을 놓았을 때 호출됩니다.
Camera.main.ScreenToWorldPoint
- 스크린 좌표에서 월드 좌표로 변환합니다.
Camera.main.WorldToScreenPoint
- 월드 좌표에서 스크린 좌표로 변환합니다.
이 외에도 다양한 좌표변환이 가능합니다.
스크립트 UI Button
1 2 3 4 5 6 7 8 9 10 11 | public class UIBtnDrag : MonoBehaviour,IDragHandler, IEndDragHandler, IPointerDownHandler { public void OnDrag(PointerEventData eventData) { transform.position = eventData.position; } public void OnEndDrag(PointerEventData eventData) { } public void OnPointerDown(PointerEventData eventData) { } } |
이번엔 handler를 이용하여 드래그라고 입력되어있는 UI버튼 오브젝트 들을
클릭 드래그하여 이동시키는 코드입니다.
오브젝트를 선택하면 eventData를 통해서 클릭이 일어난 좌표값을
가져올 수 있기때문에 마우스를 이용하여 오브젝트의 위치를 변경가능합니다.
※ Handler를 상속받았다면 포함되는 함수를 반드시 사용해야합니다.
OnDrag
- 마우스가 클릭되고 움직이는 동안 계속 호출됩니다.
OnEndDrag
- 마우스의 누른버튼을 놓았을 때 호출됩니다.
OnPointerDown
- 마우스가 클릭된 경우 호출됩니다.
클릭 드래그하여 이동시키는 코드입니다.
오브젝트를 선택하면 eventData를 통해서 클릭이 일어난 좌표값을
가져올 수 있기때문에 마우스를 이용하여 오브젝트의 위치를 변경가능합니다.
※ Handler를 상속받았다면 포함되는 함수를 반드시 사용해야합니다.
OnDrag
- 마우스가 클릭되고 움직이는 동안 계속 호출됩니다.
OnEndDrag
- 마우스의 누른버튼을 놓았을 때 호출됩니다.
OnPointerDown
- 마우스가 클릭된 경우 호출됩니다.
결과화면
영상을 마지막으로 마우스를 이용하여 오브젝트를 이동시키는
몇가지 방법에 대해 알아보았습니다.
이 기능들을 응용하여 인벤토리내의 아이템을 이동시키거나
TCG같은 카드게임의 카드들을 이동시키는 데에도 활용이 가능합니다.
몇가지 방법에 대해 알아보았습니다.
이 기능들을 응용하여 인벤토리내의 아이템을 이동시키거나
TCG같은 카드게임의 카드들을 이동시키는 데에도 활용이 가능합니다.
댓글
댓글 쓰기