1인 개발 게임 (Unity)/UNITY

[UNITY] 마우스 커서의 위치 받아오기 (mousePosition메소드)

Z46 2024. 8. 7. 10:12

안녕하세요,인친님들!

오늘은 게임 개발에서 매우 유용한 기능인 Input.mousePosition에 대해 자세히 알아보겠습니다. 이 기능을 사용하면 화면상의 마우스 커서 위치를 쉽게 알 수 있어요. 커서를 따라 움직이는 UI, 마우스로 조작하는 캐릭터, 포인트 앤 클릭 게임 등을 만들 때 꼭 필요한 기능이죠.

 

 

Input.mousePosition이란?

Input.mousePosition은 Unity에서 제공하는 속성으로, 현재 마우스 커서의 위치를 화면 좌표로 반환합니다. 이 값은 Vector3 형태로 제공되며, x와 y 값은 픽셀 단위의 화면 좌표를, z 값은 항상 0을 나타냅니다.

 

기본 사용법

Input.mousePosition의 기본적인 사용법은 매우 간단합니다. 다음과 같이 사용할 수 있어요:

using UnityEngine;

public class MousePositionExample : MonoBehaviour
{
    void Update()
    {
        Vector3 mousePos = Input.mousePosition;
        Debug.Log("마우스 위치: " + mousePos);
    }
}

이 스크립트를 게임 오브젝트에 추가하고 실행하면, 콘솔 창에 마우스의 현재 위치가 계속해서 출력됩니다.

 

화면 좌표계 이해하기

Unity의 화면 좌표계는 다음과 같습니다:

  • 원점 (0, 0)은 화면의 왼쪽 아래 모서리입니다.
  • x 좌표는 오른쪽으로 갈수록 증가합니다.
  • y 좌표는 위로 갈수록 증가합니다.
  • 최대값은 화면의 해상도에 따라 다릅니다.

예를 들어, 1920x1080 해상도의 화면에서:

  • 왼쪽 아래 모서리는 (0, 0)
  • 오른쪽 위 모서리는 (1920, 1080)
  • 화면 중앙은 (960, 540)

 

실전 예제: 마우스 따라 움직이는 오브젝트

이제 Input.mousePosition을 사용해 마우스를 따라 움직이는 오브젝트를 만들어 볼까요?

using UnityEngine;

public class MouseFollower : MonoBehaviour
{
    public float moveSpeed = 10f;
    private Camera mainCamera;

    void Start()
    {
        mainCamera = Camera.main;
    }

    void Update()
    {
        // 마우스 위치를 월드 좌표로 변환
        Vector3 mouseWorldPosition = mainCamera.ScreenToWorldPoint(Input.mousePosition);
        mouseWorldPosition.z = 0f; // z 좌표를 0으로 설정 (2D 게임용)

        // 오브젝트를 마우스 위치로 부드럽게 이동
        transform.position = Vector3.Lerp(transform.position, mouseWorldPosition, moveSpeed * Time.deltaTime);
    }
}

이 스크립트를 사용하면:

  1. 마우스 커서의 화면 좌표를 가져옵니다.
  2. 이를 게임 월드의 좌표로 변환합니다.
  3. 오브젝트가 그 위치로 부드럽게 이동합니다.

 

주의사항 및 팁

  1. 성능 고려: Update() 함수에서 Input.mousePosition을 자주 호출하면 성능에 영향을 줄 수 있습니다. 필요한 경우에만 사용하세요.
  2. 화면 밖 처리: 마우스가 화면 밖으로 나가도 Input.mousePosition은 계속 값을 반환합니다. 필요하다면 이를 체크해야 합니다.
  3. UI와 사용: Canvas의 UI 요소와 함께 사용할 때는 RectTransformUtility.ScreenPointToLocalPointInRectangle()을 사용하면 좋습니다.
  4. 3D 게임에서의 사용: 3D 게임에서는 Camera.ScreenToWorldPoint() 대신 Camera.ScreenPointToRay()를 사용하여 레이캐스팅을 해야 할 수 있습니다.

 

 

#Unity #GameDev #MouseInput #UnityTips