3d 오브젝트 드래그로 이동시키기

2022. 7. 15. 00:12유니티 unity

-

 

소스코드 보기

더보기
private Vector3 scrSpace;
public Camera camera;

void Start()
{
	camera = Camera.main; // 카메라를 미리 캐싱합니다.
}
private void OnMouseDown()
{
    scrSpace = camera.WorldToScreenPoint(transform.position); // 오브젝트를 스크린좌표로 바꾼값
}
private void OnMouseDrag()
{
    
    //마우스 좌표를 구합니다. z는 아까 오브젝트 스크린좌표로바꾼 z로 설정
    Vector3 MousePos = new Vector3(Input.mousePosition.x,
        Input.mousePosition.y, scrSpace.z);
        
    Vector3 objPosition = camera.ScreenToWorldPoint(MousePos); // 마우스좌표를 월드좌표로 변경
    
    transform.position = objPosition; // 이동
}

 

 

3d 오브젝트를 마우스 드래그를 이용해서 이동해보겠습니다.

 

마우스의 위치를 받아와서 월드 좌표로 변경해서 오브젝트 위치를 바꾸면 됩니다.

 

여기서 알아봐야 하는 함수는

 

https://docs.unity3d.com/kr/530/ScriptReference/Camera.WorldToScreenPoint.html

https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

 

 

WorldToScreenPoint는 월드 좌표를 스크린 좌표로 변경해주는 함수이며 픽셀로 나오고 왼쪽하단이 (0,0) 으로 나옵니다.

z 는 카메라의 표준 단위로 나옵니다.

 

ScreentToWorldPoint는 반대로 스크린 좌표를 월드 좌표로 변경해줍니다.

 

https://docs.unity3d.com/ScriptReference/Input-mousePosition.html

 

Input.mousePosition 함수는 현재 마우스의 위치가 스크린 좌표로 나오는 함수입니다.

z 값은 카메라의 표준 단위로 나오기 때문에 오브젝트의 z값을 스크린 좌표로 구한 뒤

 

마우스 위치 x y 와 같이 월드 좌표로 변경하면 됩니다.

 

드래그를 받는 함수는 여러 가지가 있는데

OnMouseDrag 함수를 사용했습니다.

https://docs.unity3d.com/kr/530/ScriptReference/MonoBehaviour.OnMouseDrag.html

 

OnMouseDrag를 사용할 때는 콜리젼이 있어야 해서 유의해서 사용해야 합니다.

 

마우스 이벤트를 받아서 유닛을 드래그하셔서 되고 여기서 중요한 점은 마우스의 좌표를 월드 좌표로 바꾼 뒤 오브젝트를 

이동시키면 되는 부분입니다.