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를 사용할 때는 콜리젼이 있어야 해서 유의해서 사용해야 합니다.
마우스 이벤트를 받아서 유닛을 드래그하셔서 되고 여기서 중요한 점은 마우스의 좌표를 월드 좌표로 바꾼 뒤 오브젝트를
이동시키면 되는 부분입니다.
'유니티 unity' 카테고리의 다른 글
Mathf 함수 전부 알기 (0) | 2022.07.17 |
---|---|
랜덤 원형안에 오브젝트 생성시키기 (0) | 2022.07.17 |
Handles와DrawGizmos 활용해서 시야각만들기 (0) | 2022.07.12 |
Photon Pun2 리소스(Resources) 폴더 아닌곳에서 생성하는법,에셋번들 어드레서블(Addressable) 같이 사용하는법 (0) | 2022.07.11 |
유니티 멀티쓰레드 사용시 UI가 아무런 변화가 없을때 (0) | 2022.07.11 |