코스모스 공작소

[Unity] 3D 오브젝트 마우스 포인터 따라 이동하기 본문

프로그래밍/Unity

[Unity] 3D 오브젝트 마우스 포인터 따라 이동하기

cosmos_studio_ 2022. 8. 21. 21:57
반응형

3D 오브젝트 마우스 포인터 따라 이동하기

 

마우스 포인터에 따라 활성화된 3D오브젝트가 이동하는 부분이 필요하다.

 

요구 사항

  • NewInputSystem 위에서 작동해야한다.
  • orthographic 카메라 위에서 작동하지 않고 perspective 카메라에서 작동해야한다.
{
    Vector3 pos = Mouse.current.position.ReadValue();
    pos.z = 200;
    pos = Camera.main.ScreenToWorldPoint(pos);
    pos.z = 0;
    // z 값을 수동으로 넣어주는 건 pos값이 그냥 그대로 변환하게 되면 정확한 값을 받아오지 않기 때문에
    // pos좌표가 제대로 출력 안될때 각자 기준 축 상황에 맞추어 x,y로 변환해서 사용할것

    objTrack.transform.position = pos;
}

  • 위 코드는 orthographic에서는 제대로 작동하지만 perspective에서는 정상적으로 작동하지 않음
  • 검색 결과 방법을 찾음

https://answers.unity.com/questions/566519/camerascreentoworldpoint-in-perspective.html

 

camera.screentoworldpoint in Perspective - Unity Answers

 

answers.unity.com

  • 위 링크에서 소개하는 대표적인 방법을 2개 소개하자면
  1. ray를 이용하여 마우스 포지션에서 쏘고 일정거리에 오브젝트 생성시켜서 트래킹하는 방법
  2. Camera 2개를 두고 perspective 카메라는 렌더링, orthographic 카메라는 마우스 포인터를 따라다니는 오브젝트를 렌더링하는 방법

위 방법 중 2번은 만약 perspective 카메라와 포인터를 따라다니는 오브젝트와 상호작용할때 이슈가 발생할 여지가 있어 1번을 사용하기로 한다.

 

public Vector3 GetWorldPositionOnPlane(Vector3 screenPosition, float z) 
{
     Ray ray = Camera.main.ScreenPointToRay(screenPosition);
     Plane xy = new Plane(Vector3.forward, new Vector3(0, 0, z));
     float distance;
     xy.Raycast(ray, out distance);
     return ray.GetPoint(distance);
 }

 

이제 perspective 카메라에서도 마우스 포인터에 3D 오브젝트가 따라다니는 것을 볼 수 있다.

반응형
Comments