소소한 개발 공부
[유니티|2D] 터치로 UI 오브젝트, 월드 오브젝트 이동하기 본문
게임에서 건물 같은 오브젝트의 위치를 터치로 이동할 때 오브젝트에 딸린 UI도 같이 움직여야 한다.
Input.mousePosition을 사용한다.
public void OnDrag(PointerEventData eventData)
{
if (!isPointerDown)
return;
// 이동 모션
// 월드 상의 오브젝트 이동
this.transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// 혹은 eventData 이용
this.transform.position = Camera.main.ScreenToWorldPoint(eventData.position);
this.transform.position -= new Vector3(0,0,-10); // ScreenToWorld를 하게 되면 z축값=-10
// UI 오브젝트 이동
editModes.transform.position = Input.mousePosition;
}
위 메서드가 담긴 스크립트는 다음을 포함해야 한다.
1. using UnityEngine.EventSystems;
으로 EventSystems을 추가하고 (IDragHandler 인터페이스를 가진 네임스페이스)
2. IDragHandler 인터페이스를 상속 받아야한다. (OnDrag 함수를 오버라이딩하기 위해)
isPointerDown : 현재 이 오브젝트가 이동가능한 상태인지를 나타내는 bool 변수 (true일 때 이동 가능)
[월드 오브젝트 이동]
this.transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);
: this.transform.position 은 이 스크립트를 가진 월드 오브젝트의 위치를 나타낸다.
월드 오브젝트를 마우스 위치(스크린 상 위치, Input.mousePosition)에 따라 이동시킨다.
ScreenToWorldPoint는 스크린 상의 값을 월드 상의 값으로 바꿔준다.
ex) 해상도가 720*1280일 때 화면 가운데를 클릭하면 마우스 위치는 (360, 640, 0)이 된다.이를 ScreenToWorldPoint로 변환하면 (0,0,-10)이 된다.(= 월드 상 가운데)따라서 필요에 따라 z축값을 0으로 맞춰준다.
[UI 오브젝트 이동]
editModes.transform.position = Input.mousePosition;
: editModes는 GameObject로 선언된 변수이며, UI 오브젝트를 할당해 사용한다.
마우스 터치로 이 오브젝트를 이동할 때 마우스 위치에 따라 이동해야 하기 때문에
오브젝트의 위치를 마우스 위치(Input.mousePosition)을 넣어준다.
'개발 > Unity' 카테고리의 다른 글
[Unity] 2D 탑다운 게임 | 아래쪽 오브젝트가 맨 위에 그려지게 하기 (0) | 2021.10.04 |
---|---|
[유니티] 에디터 상의 버튼을 스크립트로 클릭하기 (0) | 2021.08.26 |
[유니티] Text 타이핑 효과 내기 (0) | 2021.08.18 |
[Unity] 2D 핀치 줌 Pinch Zoom 구현 + 화면 끌기(패닝 Panning) (0) | 2021.05.19 |
[Unity] 애니팡식 하트 충전 : 시간에 따른 값 충전 (0) | 2021.05.14 |