본문 바로가기

Unity3D/C#

유니티 마우스 커서, 이미지 마우스 따라다니게 하기 (Mouse Position)

반응형

 

 

윈도우10 마우스 커서를 본 적은 누구나 한 번쯤은 있을 겁니다. 또한 자신이 원하는 커서로 바꿔보신 분들도 있을 것입니다. 바꾸는 이유는 보통은 자신만의 개성을 살려서 컴퓨터를 사용하고 싶기 때문일 것입니다. 유니티에서도 기본적으로 마우스가 움직일 때 컴퓨터에서 사용하는 커서가 보입니다. 유니티에서 커서를 바꾸는 잘 알려진 방법은 크게 두 가지가 있습니다. 하나는 Project Settings에서 Player에 있는 Default Icon을 바꾸는 것입니다. 이런 경우 사용할 이미지를 플랫폼에 따라 Read/Write Enabled를 반드시 체크해 줘야 빌드 이후 정상적으로 표시가 됩니다. 간단하긴 하지만 단순 이미지를 넣고 바꾸는 형태여서 커스터마이징이 쉽지 않습니다. 또 다른 하나의 방법은 스크립트로 마우스의 좌표를 인식해서 2D 게임 오브젝트를 이동하는 방식입니다. 이 방식은 구현하기 매우 간단하며 내가 원하는 곳에 배치하거나 스르륵 숨기거나 움직이게 한다거나 Text로 표현한다거나, 유니티 기능을 전반적으로 사용할 수 있기 때문에 다양하게 커스터마이징이 가능해서 유용합니다. 마우스 커서를 사용할 경우 이미지, 등의 Graphic에서 가장 주의해야 될 부분은 raycastTarget입니다. 커서는 항상 마우스를 따라다니기 때문에 커서보다 아래에 있는 버튼이 클릭이 안될 수 있기 때문에 꼭 필요한 경우 아니면 꺼두는 게 좋습니다.

 

 

C# (UNITY 3D)

 

 

마우스 커서 예시

 

마우스의 위치를 받아서 2D 게임 오브젝트를 그대로 따라다니게 하는 예시입니다. 예시에서는 2개의 2D 이미지를 이동시키며 하나는 pivot 값을 바꾸어 마우스 클릭 위치를 맞췄습니다. 다른 하나는 이미지 사이즈 절반만큼 이동시켜서 겹치지 않고 같이 따라다니게 했습니다. 얼마 전 할루윈이 있어서 귀여운 유령 캐릭터를 따라다니게 했습니다. 현재 mouse의 위치를 텍스트로 표시합니다.

 

 

 

using UnityEngine.UI;

 

마우스의 현재 위치 표시용 Text를 사용하기 위해 UnityEngine.UI를 사용합니다.

 

 

할당

마우스를 따라다니게 할 2D 오브젝트 2개와 위치를 표시할 Text를 할당합니다.

 

 

 

 


    public RectTransform transform_cursor;
    public RectTransform transform_icon;
    public Text text_mouse;

    private void Start()
    {
        Init_Cursor();
    }
    private void Update()
    {
        Update_MousePosition();
    }

    private void Init_Cursor()
    {
        Cursor.visible = false;
        transform_cursor.pivot = Vector2.up;

        if (transform_cursor.GetComponent<Graphic>())
            transform_cursor.GetComponent<Graphic>().raycastTarget = false;
        if (transform_icon.GetComponent<Graphic>())
            transform_icon.GetComponent<Graphic>().raycastTarget = false;
    }

    //CodeFinder 코드파인더
    //From https://codefinder.janndk.com/ 
    private void Update_MousePosition()
    {
        Vector2 mousePos = Input.mousePosition;
        transform_cursor.position = mousePos;
        float w = transform_icon.rect.width;
        float h = transform_icon.rect.height;
        transform_icon.position = transform_cursor.position + (new Vector3(w, h) * 0.5f);

        string message = mousePos.ToString();
        text_mouse.text = message;
        Debug.Log(message);
    }

 

변수(variable)

transform_cursor(RectRectTransform) : 메인 마우스 커서
transform_icon(RectRectTransform) : 마우스 커서 옆에 있는 꾸미기용 커서
text_mouse(Text) : 위치값 표시

 

함수(function)

Init_Cursor : 커서 pivot을 조정하고 실제 마우스 커서는 숨깁니다. 따라다니는 커서 이미지가 raycastTarget이 꺼져있지 않으면 아래에 있는 버튼이 클릭되지 않을 수도 있기 때문에 커서의 raycastTarget을 꺼줍니다.
Update_MousePosition :실시간으로 마우스의 좌표를 받아서 2개의 커서에 위치값을 반영해 주고 위치값을 텍스트로 표시합니다.

 

 

 

Change Mouse Cursor / 커서 숨기기 / Cursor Customizing / Graphic RaycastTarget

 

 

 

반응형